Надежно работать с паролями - PullRequest
1 голос
/ 17 марта 2010

У меня есть веб-сервис Java и веб-клиент Java, использующий этот сервис. Одна из функций - создать новую учетную запись пользователя. Мои две проблемы:

  1. Как я буду безопасно отправлять пароль пользователя с клиента.
  2. Как надежно хранить пароль пользователя на сервере.

Как мне этого достичь? Я знаю теорию, в основном основанную на безопасности, алгоритмах безопасности и т. Д., Но кто-нибудь может дать мне несколько советов о том, как мне поступить в кодировании? Может ли кто-нибудь указать мне несколько хороших (и, возможно, не сложных) примеров для подражания, поскольку я нашел некоторые примеры в Интернете очень искаженными?

Большое спасибо и всего наилучшего, Krt_Malta

Ответы [ 2 ]

3 голосов
/ 17 марта 2010

Как правило, если вас беспокоит передача пароля в открытом виде из веб-клиента в службу, вы можете запустить службу через SSL.

На сервере я никогда не храню пароль в открытом виде, хешируя его перед сохранением. Обязательно используйте соли. Когда пользователь входит в систему позднее, я хеширую предоставленный им пароль, а затем сравниваю хешированное значение с ранее сохраненным хешированным значением. Если они совпадают, то пользователь прошел аутентификацию. В моем случае есть нечто большее, чем это (с особенностями «Помни меня» и т. Д.), Но в этом его суть.

Я использую Apache Shiro фреймворк, чтобы помочь в этом. Он довольно легкий и не требует веб-среды, но будет работать и с ней. Он интегрируется с Spring и другими решениями, но опять же, это не обязательно. Вероятно, стоит проверить.

2 голосов
/ 18 марта 2010

Правило Джона: всегда старайтесь избегать написания собственного программного обеспечения для обеспечения безопасности. Слишком легко совершать ошибки, такие как шифрование, а не хеширование, не использование солей и т. Д. Вы не найдете много экспертов по безопасности, которые рассмотрят ваш код, но вы можете ожидать, что довольно многие обращали внимание на более популярные системы с открытым исходным кодом.

Во-первых, можете ли вы использовать OpenID или Shibboleth , чтобы не давать людям еще одну систему, для которой им нужен пароль - я бы поблагодарил вас, если бы я мог использовать существующую учетную запись !

Если ответ «нет», то для хранения пароля попробуйте бесплатный сервер LDAP, такой как OpenDS или Apache Directory Server .

Используйте Spring Security или аналогичный для управления входами в систему и запоминанием. (Есть хорошее видео , которое представляет весеннюю безопасность.)

Вам нужно будет использовать SSL (https), как указано в других ответах, если вы хотите, чтобы ваша система передавала пароли от клиента к серверу.

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