Восстановление пароля 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, а затем отправить пользователя по электронной почте.