Управление паролями WebApp - хеширование, соление и т. Д. - PullRequest
6 голосов
/ 20 мая 2010

Я ищу самый безопасный (но все же выполнимый) способ управления паролями в веб-приложении.

Сейчас я сохраняю пароль в виде хэша.Учетная запись БД приложения ограничена исключением хранимых процедур, и я аутентифицирую пользователей, передавая имя пользователя и хешированный пароль хранимой процедуре, которая возвращает 1 (true) или 0 (false).

Таким образом, естьнет шансов получить пароль от сервера, даже если у вас есть учетная запись базы данных приложения.Вот что мне нравится в этом решении.Но чтобы использовать это, клиент должен отправить свой пароль через Интернет или, по крайней мере, статический хеш, который может быть перехвачен.

Таким образом, я пришел к мысли использовать рукопожатие как это:

  • Клиент запрашивает у сервера соль.
  • Случайная соль передается клиенту и сохраняется на сервере для этого единственного клиента.
  • Клиент создает хэш (соль + пароль) и возвращает этот хэшсервер
  • Сервер создает хэш (соль + пароль) и проверяет его на то же, что и на клиенте

Использование этого рукопожатия позволяет проверить пароль без отправки самого себя или статического хэшаЭто.Просто динамический соленый хеш, который отличается каждый раз, когда пользователь входит в систему => Высокая безопасность.

Но для этого рукопожатия мне нужен пароль или, по крайней мере, хешированный пароль из БД.Но это позволяет кому-то получить хотя бы хешированный пароль и использовать его вне приложения.

Что бы вы предпочли?Хранить пароль внутри БД и делать что-нибудь там (безопасный сервер), или вынимать его из БД и делать это снаружи (безопасная передача)?

Заранее спасибо, отметки

1 Ответ

3 голосов
/ 20 мая 2010

Предложенное вами решение на самом деле не решает проблему. Тем не менее, сервер должен знать пароль, поэтому его нужно было перенести в какой-то простой форме, чего вы и хотели избежать в первую очередь. Таким образом, вы избегаете повторной отправки пароля каждый раз, но если кто-то перехватил его при первой передаче?

Я думаю, вам не следует изобретать велосипед :-) Используйте SSL для всех соединений, и тогда ваши первые решения будут работать нормально. Вы можете даже выполнить хеширование на стороне клиента, поэтому по защищенному каналу отправляется только хеш. Ваш сервер никогда не будет знать пароль, и это не обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...