Я работаю над разработкой сильного алгоритма для надежного восстановления паролей и поиска обратной связи от сообщества пользователей. Вот что я придумал до сих пор (с помощью What are best practices for activation/registration/password-reset links in emails with nonce) процесс сбросаНадежный алгоритм для «сброса пароля»
Пароль работает следующим образом: Когда пользователь запрашивает, что «сбросить пароль канала связи по электронной почте к ним» ...
- Сгенерировать $ salt
- Подскажите пользователю адрес электронной почты, на который они хотят отправить ссылку на «сброс пароля».
- Извлечение $ ключа (= секретный пользовательский предопределенные данные чувствительные счета, что только они знают, такими как город, они родились или ПКР # LAST4)
- Создание $ nonce = хэш ($ электронной почты. $ Ключа)
- Сохранить в таблице:
- $ нонс (PK)
- $ соль
- $ EXP_DATE
- Создание $ хеш = хеш ($ соль $ электронная почта $ ключ..)
- Email пользователю ссылку, чтобы сбросить свой пароль @ URL = ... хэш = $ хэш
Когда пользователь нажимает на ссылку, мы послали их, приводит их к виду:
- Enter $ электронная почта
- Введите $ новый_пароль
- Confirm $ новый_пароль
- Запрашивать Key Field ... то есть: «Введите город вы родились в:» Введите $ ключ
Когда пользователь отправляет этот образуют ...
- Получить $ хэш от URL
- Recreate $ Нонс = хэш ($ электронной почты. $ key)
- Используйте $ nonce для извлечения $ salt из нашей таблицы (если не реализовано).
- Если хэш ($ соль. $ По электронной почте. $ Ключ) == $ хэш из URL, то проверка ХОРОШО !, поэтому мы ... обновление пароля пользователя в базе данных
- В противном случае, мы отказываемся от попытка изменить пароль
Примечания:
- Все $ электронная почта и $ основные ответы обрезаются и нижнему регистру до обработки, чтобы избежать путаницы.
- Регулярное техническое обслуживание sproc должно периодически удалять все истекшие разряды, чтобы таблица была чистой
Как вы думаете?
Что еще более безопасно в этом случае, просто сохраняя достаточно длинный, случайный токен на стороне сервера и отправляя его пользователю на почту? Я не понимаю. –
Niklas: Любой, у кого есть токен, может его взломать. (т. е. любой, кто может заглянуть в учетную запись электронной почты пользователя - злые системные администраторы, следующий парень, чтобы использовать публичный ПК после того, как оригинальный пользователь забыл выйти и т. д.). –
Чтобы получить ссылку, нужно будет взломать учетную запись электронной почты. Вы можете повысить безопасность, добавив секретный вопрос или запросив «секретные пользовательские данные конфиденциальной учетной записи» в форме сброса пароля, но это не требует хэширования (или я что-то пропустил?) –