bcrypt — PHP Сброс пароля с кодом вместо ссылки

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

Процедура будет …

  1. Пользователь запускает сброс пароля, вводя адрес электронной почты
  2. E-mail проверяется в БД как подлинный пользователь
  3. Электронное письмо отправляется этому пользователю со случайно сгенерированным кодом
  4. Тот же код bcrypt’ed и вставлен в базу данных в выделенном столбце
  5. Пользователь вводит код, отправленный им по электронной почте
  6. Проверяется по сохраненному паролю bcrypt
  7. (Если все верно) Пользователь может ввести новый пароль

-1

Решение

На самом деле нет никакой разницы с точки зрения безопасности, будь то код или ссылка.

Все, что делает ссылка — автоматически вводит код и отправляет форму; Единственным недостатком ссылки является то, что некоторые (на мой взгляд, плохие) провайдеры электронной почты автоматически отправляют запросы GET на все ссылки в электронных письмах, и в этом случае ваша ссылка должна вести на страницу с просьбой нажать кнопку для подтверждения. сброс (выдача второго запроса POST за кулисами), чтобы «случайные» GET не инициировали сброс.

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

Поэтому, если вы согласны с тем, что почта потенциально незашифрована во время транспортировки (не то, чтобы вы могли с этим многое сделать — возможно, с помощью SMS, но даже это не зашифровано, и я не совсем уверен, какой из них труднее перехватить), единственная защита Вы можете принудительно установить, чтобы страница ввода кода / страница ссылки обслуживалась только по HTTPS, чтобы злоумышленник, сидящий между компьютером пользователя и вашим сервером, не смог его перехватить, когда пользователь попытается ввести код или ссылку.

Хорошее решение для взаимодействия с пользователем — сделать так, чтобы ваша страница ввода кода принимала параметры строки запроса для автоматического заполнения кода, если он был предоставлен (и предоставляла пользователю пустую форму для заполнения вручную, если параметр отсутствует), и ваш адрес электронной почты должен содержать ( HTTPS) ссылка и код на случай, если пользователь по какой-либо причине не может использовать ссылку.

2

Другие решения

Других решений пока нет …