Что такое безопасный и эффективный способ для пользователей сайта сбросить свой пароль? - PullRequest
5 голосов
/ 04 января 2011

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

Мои профили содержат следующие данные:

username
password (in hash/digest form)
email

IХотелось бы, чтобы метод сброса пароля был безопасным, удобным и эффективным.

Ответы [ 3 ]

8 голосов
/ 04 января 2011

Вы должны добавить два поля, reset_code и reset_expiry

Это процесс для функции безопасного сброса пароля.

  • Пользователь выбирает «Забыли пароль».

  • У пользователя запрашивается электронная почта / имя пользователя.

  • Если он действителен, генерирует GUID, сохраняет его в reset_code и также сохраняет Now () + 24 часав reset_expiry в базе данных против этого конкретного пользователя.

  • Затем он отправляет электронное письмо на адрес электронной почты со ссылкой для подтверждения сброса пароля.Это электронное письмо будет содержать ссылку на ваш сайт со встроенным именем пользователя И кодом сброса.(Это останавливает злонамеренного пользователя, сбрасывающего пароль третьих лиц, просто зная его электронную почту)

  • Как только пользователь нажмет на ссылку в письме, он будет перенаправлен на ваш сайт.Ваш веб-сайт подтвердит, что: имя пользователя и код сброса совпадают, и текущее время не превысило время reset_expiry.

  • Если все в порядке, мы можем завершить сброс пароля.Это может быть сделано одним из следующих способов:а) На экране новый случайно сгенерированный парольб) Новый случайно сгенерированный пароль по электронной почтев) Возможность ввода пароля по своему выбору

7 голосов
/ 04 января 2011

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

Обновление : если вы выполняете вышеизложенное, стандартная процедура должна иметь форму «require-password-reset».Пользователь вводит свой идентификатор (обычно это электронная почта), и генерируется «токен» (например, случайная строка), хранится в некоторой таблице с определенной датой истечения срока действия и отправляется на его электронную почту вместе со ссылкой на «сброс пароля»форма.В этой форме токен проверяется, пользователю разрешается вводить новый пароль и получает указание попробовать новый логин.

Обновление 2 : может возникнуть небольшая проблема конфиденциальности:мы делаем, если идентификатор пользователя (электронная почта, имя пользователя или что-то еще), введенный в форму запроса, не существует в нашей базе данных?Для вывода сообщения «Пользователь не существует. Проверьте идентификатор и повторите попытку.» может быть в порядке, но в некоторых случаях это может вызвать проблему конфиденциальности: любой может проверить, зарегистрирован ли другой пользователь в вашей базе данных!Если вы хотите избежать этого, вы должны вывести то же сообщение («письмо было отправлено с инструкциями ...»), даже если пользователь не был найден (и, следовательно, письмо фактически не было отправлено).Подобные проблемы конфиденциальности рекомендуют просто выводить сообщение «неправильный вход в систему: неверный пользователь или пароль» , когда пользователь пытается войти в систему неудачно - не раскрывайте, был ли это неправильный пользователь или пароль.

0 голосов
/ 04 января 2011

Я согласен с Леонблой. Хранение пароля приводит к таким проблемам, как инцидент с Gawker, произошедший несколько недель назад (было обнаружено и опубликовано 1,5 миллиона комбинаций идентификаторов пользователей и пользователей).

Однако у вас должна быть функция «Сброс пароля», которая отправляет новый пароль по электронной почте на исходный адрес электронной почты, использованный для открытия учетной записи.

Не должно быть положений об изменении адреса электронной почты во время сброса пароля. Если у пользователя больше нет доступа к старой учетной записи электронной почты, это тоже плохо. Оставьте аккаунт и начните все сначала.

И используйте хорошую капчу на экране сброса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...