Я ищу самый безопасный (но все же выполнимый) способ управления паролями в веб-приложении.
Сейчас я сохраняю пароль в виде хэша.Учетная запись БД приложения ограничена исключением хранимых процедур, и я аутентифицирую пользователей, передавая имя пользователя и хешированный пароль хранимой процедуре, которая возвращает 1 (true) или 0 (false).
Таким образом, естьнет шансов получить пароль от сервера, даже если у вас есть учетная запись базы данных приложения.Вот что мне нравится в этом решении.Но чтобы использовать это, клиент должен отправить свой пароль через Интернет или, по крайней мере, статический хеш, который может быть перехвачен.
Таким образом, я пришел к мысли использовать рукопожатие как это:
- Клиент запрашивает у сервера соль.
- Случайная соль передается клиенту и сохраняется на сервере для этого единственного клиента.
- Клиент создает хэш (соль + пароль) и возвращает этот хэшсервер
- Сервер создает хэш (соль + пароль) и проверяет его на то же, что и на клиенте
Использование этого рукопожатия позволяет проверить пароль без отправки самого себя или статического хэшаЭто.Просто динамический соленый хеш, который отличается каждый раз, когда пользователь входит в систему => Высокая безопасность.
Но для этого рукопожатия мне нужен пароль или, по крайней мере, хешированный пароль из БД.Но это позволяет кому-то получить хотя бы хешированный пароль и использовать его вне приложения.
Что бы вы предпочли?Хранить пароль внутри БД и делать что-нибудь там (безопасный сервер), или вынимать его из БД и делать это снаружи (безопасная передача)?
Заранее спасибо, отметки