В настоящее время я заканчиваю сайт, на котором пользователи должны создавать личную учетную запись, чтобы играть в игру, размещенную на том же веб-сайте. В настоящее время мне сложно понять, как реализовать безопасные функции сброса пароля для пользователей в случае забытого пароля.
Это процесс, который в настоящее время действует:
Шаг 1 : Пользователь нажимает ссылку «Забыли пароль» на веб-сайте.
Шаг 2 : Пользователь вводится в форму и дважды вводит адрес электронной почты перед отправкой электронной почты.
Шаг 3 : Email содержит ссылку на другую форму, где пользователь может дважды ввести новый пароль для подтверждения. После ввода второй формы система вставляет новую запись в мою таблицу Recover_Password в базе данных, которая содержит столбцы «id», «токен», «created_at» и «expires_at».
Это ссылка -> (mywebsitename) .com / form? Id = 99999 & token =
Где «id» – это идентификатор пользователя, а «токен» генерируется из do_hash($id . date('Ym-d'))
Шаг 4 : Пользователь заполняет форму и выводится на страницу входа в систему. Система очищает маркерную запись из базы данных и обновляет текущий пароль пользователя из таблицы пользователя.
Также я хочу знать, что делать, если пользователь пытается обновить страницу браузера, когда они находятся во второй форме. В настоящее время я разрешаю доступ только к странице, если в параметрах get есть идентификатор и токен, и что они оба существуют в базе данных.
Я использую Codeigniter для всего веб-сайта и вам нужно знать, является ли это безопасным способом выполнения этого, а также как я должен обрабатывать токен и базу данных. Спасибо!!
Безопасный способ обработки сбрасываемых паролей может выглядеть так:
Запрос на сброс пароля:
Пользователь открывает форму запроса на сброс пароля и вводит адрес электронной почты (нет необходимости вводить его дважды, просто выполните проверку синтаксиса).
Ваше приложение проверяет наличие электронной почты в вашей базе данных. Если он существует, он создает токен, который должен быть случайным и не утомленным из информации, такой как идентификатор пользователя или временная метка. Хэш жетона будет храниться в базе данных в отдельной таблице вместе с идентификатором пользователя и датой истечения срока действия. Ссылка на токен отправляется пользователю по электронной почте.
Восстановление пароля:
Пользователь щелкает по ссылке и открывает форму сброса. В этой форме он может ввести новый пароль дважды. Токен должен быть включен как скрытый входной тег в форме.
После подачи формы приложение проверяет его токен. Если он соответствует и не истек, пароль может быть изменен, и пользователь может войти в систему напрямую (вы можете оставить ему форму для входа в систему). Наконец, токен должен быть деактивирован, я сам предпочитаю хранить запись, поэтому я могу сообщить пользователю, что токен уже использовался, когда он снова нажимает ссылку.
Одна из проблем, с которыми вы столкнетесь, заключается в том, что вам нужно найти хэш-маркер в базе данных. Существует два возможных способа сохранения токена:
Вы используете хэш-код с хэш-алгоритмом, таким как SHA512 без соли. Это безопасно, если токен очень сильный (минимальная длина 20 с 0-9 az AZ). Теоретически вам нужно проверить, существует ли такой хеш, прежде чем вводить его в базу данных, на практике это незначительно. Я применил класс сброса пароля, который может обрабатывать такие токены.
У вас есть знак с BCrypt и солью. Это позволяет использовать более короткие токены, но вы не можете искать хешированный токен в базе данных. Вместо этого вы должны указать идентификатор строки в ссылке, чтобы найти токен.