Как ссылки с истечением одного клика работают из контекста сброса пароля - PullRequest
3 голосов
/ 24 ноября 2011

Я проектирую и разрабатываю форму "Сброс пароля" , где пользователь указывает имя пользователя / адрес электронной почты, чтобы приложение отправляло ссылку в электронном письме, чтобы пользователь мог щелкнуть и ввести новый пароль. Все, что меня интересует, - это ссылка. Как мне продолжать выполнять эту работу (я не ищу ответы, которые будут основаны на мнении, а скорее на практике, шагах, которые работали для ваших приложений).

  • Убедитесь, что ссылка не включена в закладки (Не разрешайте ему сбросить пароль с той же ссылкой)

  • Если ссылки также содержат информацию об истечении срока действия, что произойдет, если он нажмет ссылку с истекшим сроком действия

Вы также можете помочь мне, предоставив другие проблемы, с которыми я могу столкнуться при текущем плане выполнения.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Я только что реализовал нечто подобное.

  1. Пользователь нажимает «потерянный пароль» и вводит адрес электронной почты.

  2. После отправки создайтесбросить код, чтобы основной пароль не изменился.(тоже надо посолить)Установите тайм-аут для использования кода сброса.

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

Я решил сделать код сброса как часть URL-адреса, чтобы сделать его более удобным для пользователей.Что касается закладок, ну, вы не можете защитить всех пользователей, как это.Если они хотят добавить эту страницу в закладки, дайте им.Вышеуказанные меры должны помешать им представить что-либо вне линии.

2 голосов
/ 24 ноября 2011

Мне нравится подход, состоящий в том, чтобы создать строку, которая выглядит примерно так: [username] [currentPassword] [expirationDate], хэшировать ее, а затем создать ссылку, которая выглядит следующим образом: resetPassword.php ? имя пользователя = [имя пользователя] & Exp = [EXPIRATIONDATE] и хэш = [хеш]

В файле resetPassword.php вы проверяете этот хеш с информацией в параметрах GET + ваш старый пароль, и, если хеш совпадает, продолжайте сбрасывать пароль. Таким образом, срок действия ссылки истекает всякий раз, когда она истекает, и будет невозможно сбросить пароль для этой ссылки после его изменения.

Другой подход заключается в сохранении кода сброса пароля в базе данных.

2 голосов
/ 24 ноября 2011

При отправке формы сброса вы генерируете случайный код, сохраняете его в базе данных (с информацией об истечении срока действия, если необходимо, и с флагом, если он был использован) и включаете его в качестве параметра в ссылку.

Ссылка возвращает пользователя обратно в форму сброса, где вы проверяете, находится ли код (параметр) в базе данных и не истек или уже использовался.

...