В настоящее время я разрабатываю небольшой веб-сайт, и я хотел бы реализовать «забыли пароль?» особенность. Вот моя идея:
забыл ваш пароль, на веб-странице будет:
Email: (input box)
(button: "Make temp password")
При нажатии кнопки «Создать временный пароль»:
- Очистить ввод электронной почты для SQLi / XSS
- Убедитесь, что адрес электронной почты существует в базе данных.
- если нет, попросить пользователя создать новую учетную запись или проверить правописание электронной почты
- Создайте случайный пароль (т.е. «xh5MvQe») и поместите его в базу данных в поле временного пароля пользователя.
- перезаписать, если уже существует. не трогайте основной пароль. пользователь сможет войти в систему с двумя паролями в течение следующих 48 часов.
- Получите текущее время UTC плюс 48 часов и поместите его в поле даты истечения временного пароля пользователя в базе данных. перезаписать, если уже существует.
- Отправить письмо пользователю с временным паролем
В моей базе данных есть следующие поля для пользовательской таблицы:
(primary key) user id
name
nickname
(non null, unique) email
(non null) password (encrypted)
temporary password
temporary password expiration
Получив пароль, пользователь может войти в систему и изменить свой основной пароль.
Вопрос: это безопасный способ реализации этой функции? Моя главная задача - отправка простого текстового пароля по электронной почте. Я видел другой способ создания ссылки с хэшем электронной почты / меткой времени / случайным идентификатором в качестве параметра GET, но я не вижу, насколько это более безопасно. Пожалуйста, поправьте меня, если я ошибаюсь.