Помощь PHP с паролем reset и срок действия токена

Я хочу настроить восстановление пароля php script, используя токен, срок действия которого истекает через 24 часа, но я не уверен, как это сделать. У меня есть SHA1 зашифрованные пароли пользователей на данный момент, все, что я хочу сделать, я думаю, это добавить токен к URL-адресу, который отправляется пользователю, когда он запрашивает пароль reset, но как я могу сделать это правильно и что мне нужно хранить в базе данных?

Ответы

Ответ 1

  • Когда ваш пользователь запрашивает пароль reset, генерирует токен и вычисляет дату его истечения.
  • Сохраните токен и дату его истечения в отдельных столбцах в таблице ваших пользователей для этого пользователя.
  • Отправьте электронное письмо пользователю, содержащему ссылку reset, с маркером, добавленным к URL-адресу
  • Когда ваш пользователь следует за ссылкой, возьмите маркер с вашего URL (возможно, с помощью $_GET['token'])
  • Проверить токен в таблице пользователей
  • Убедитесь, что он еще не истекает
    • Если он истек, недействительным, возможно, очистив поля и разрешив пользователю повторно отправить
  • Если токен действителен и годный для использования, сообщите пользователю пароль reset форме
  • Подтвердите и обновите пароль и очистите поля токена и истечения срока действия

Ответ 2

Я бы вообще не использовал базу данных. Но одностороннее шифрование. Просто отправьте необходимую информацию в гиперссылку, содержащуюся в письме, подписанную хэшем. Что-то вроде этого

$token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";

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

Ответ 3

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

Ответ 4

Я бы сделал это, установив еще одну базу данных под названием pessword_reset_sessions.

Чтобы вы могли сохранить следующее:

идентификатор пользователя generalhash userhash timeinititated Попытки

тогда с идентификатором пользователя вы указываете идентификатор пользователя obv, а общий хеш - это хеш, который НЕ отображается пользователю, а используется для создания userhash.

timeinitiated должна быть отметкой времени UNIX, когда он сначала запросил новый пароль.

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

и выпустить электронное письмо, содержащее userhash.

когда хэш возвращается через $_GET['hash'], вы создаете еще один хэш из generalhash для сравнения с хэшем, который приходит через $_GET [], если хеш не совпадает, вы увеличиваете attempts

вы также можете проверить, прежде чем убедиться, что он не отключил безопасность для двух попыток.