Восстановление пароля PHP

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

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

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

Ответ 1

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

Вместо этого вы должны:

  • Поставьте некоторую проверку на запрос пароля reset, например CAPTCHA.
  • Создайте одноразовый случайный код и отправьте ему ссылку на адрес электронной почты пользователя.
  • Срок действия этого кода истекает, скажем, через час.
  • Истек срок действия этого кода после использования.
  • По ссылке с кодом, если он проверяет, разрешите ему сменить пароль.
  • Сообщите ему, что пароль был изменен, но не отправляйте его по электронной почте.

Ответ 2

Вы не восстанавливаете пароли. Что вы делаете, это одна из двух вещей.

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

Ответ 3

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

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

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

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

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

3. Отправить адрес электронной почты для восстановления

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

4. reset пароль

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

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

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

Ответ 4

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