Восстановление пароля PHP - PullRequest
10 голосов
/ 21 января 2011

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

Но если я хочу настроить систему восстановления пароля, какова лучшая стратегия, поскольку нет хеширования?

Может ли кто-нибудь дать мне краткий обзор хорошей и безопасной стратегии для хранения и восстановления паролей?

Ответы [ 4 ]

38 голосов
/ 22 января 2011

Вы не можете восстановить хешированный пароль, как и вы.

Вместо этого вы должны сделать следующее:

  1. Поставить некоторую проверку в запрос на сброс пароля, например CAPTCHA.
  2. Создайте одноразовый случайный код и отправьте ссылку на него на электронную почту пользователя.
  3. Срок действия этого кода истекает, скажем, через час.
  4. Срок действия этого кода истекаетсразу после использования.
  5. По ссылке с кодом, если он действителен, разрешите ему сменить пароль.
  6. Сообщите ему, что пароль был изменен, но не отправляйте его по электронной почте.
7 голосов
/ 22 января 2011

Вы не «восстанавливаете» пароли.То, что вы делаете, - это одна из двух вещей.

  1. Отправьте пользователю по электронной почте ссылку для создания нового пароля, переопределив текущий пароль
  2. Отправьте пользователю случайно сгенерированный пароль, затем спросите егоизменить его
2 голосов
/ 03 мая 2015

Мой процесс выглядит следующим образом.

1. Пользователь инициирует запрос забытого пароля

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

2. Адрес электронной почты подтвержден и сгенерирован токен

После того, как пользователь ввел свой адрес электронной почты, система проверяет его наличие в базе данных. Если адрес электронной почты действителен, токен генерируется и сохраняется в базе данных с учетными данными пользователя.

3. Отправить письмо для восстановления

На зарегистрированный адрес электронной почты отправляется электронное письмо со ссылкой на форму сброса, ссылка содержит 2 параметра GET, включая токен и уникальный идентификатор пользователя, хранящийся в базе данных.

4. Сбросить пароль

После того, как пользователь щелкнет ссылку, он будет переведен в форму сброса. Система извлекает 2 параметра GET из URL и проверяет их наличие в базе данных. Если подтверждается, что токен существует в базе данных с пользователем, то пользователю может быть показан поля формы сброса пароля для ввода нового пароля.

Безопасность

Я предлагаю использовать BCrypt (доступен с PHP 5.3) для хэширования паролей и для дополнительной безопасности, возможно, использовать какой-то срок действия для токена, чтобы его нельзя было использовать через некоторое время.

1 голос
/ 21 января 2011

Вы можете создать новый (и случайно сгенерированный) пароль для пользователя и md5 его, а затем отправить пользователя по электронной почте.

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