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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Сброс пароля

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

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

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

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