Забыли пароль:каков наилучший метод реализации функции "Забыли пароль"?

StackOverflow https://stackoverflow.com/questions/522967

Вопрос

Мне интересно, каков наилучший метод для создания функции "Забыли пароль" на веб-сайте.Я видел довольно много из них, вот несколько или комбинация из:

  • вопрос-пароль / ответ (1 или более)
  • отправить электронное письмо с новым паролем
  • на экране введите новый пароль
  • подтверждение по электронной почте:необходимо нажать на ссылку, чтобы получить новый пароль
  • страница, требующая от пользователя ввести новый пароль

Какую комбинацию или дополнительные шаги вы бы добавили к функции "Забыли пароль"?Мне интересно о том, как они запрашивают новый пароль и как они в конечном итоге его получают.

Я использую принципал, который не может быть восстановлен паролем;необходимо ввести/сгенерировать новый пароль.

Редактировать Мне нравится то, что сказал Кори о том, чтобы не отображать, существует ли имя пользователя, но мне интересно, что отобразить вместо этого.Я думаю, половина проблемы заключается в том, что пользователь забыл, какой адрес электронной почты он использовал, что полезно для отображения какого-то сообщения "не существует".Есть какие-нибудь решения?

Это было полезно?

Решение

  1. Лично я бы отправил электронное письмо со ссылкой на краткосрочную страницу, которая позволяет им установить новый пароль.Сделайте название страницы каким-нибудь UID.
  2. Если вам это не нравится, то вполне подойдет отправка им нового пароля и принудительное изменение его при первом доступе.

Вариант 1 намного проще.

Другие советы

Несколько важных проблем безопасности:

  • Вопрос-ответ с парольной фразой фактически снижает безопасность, поскольку обычно она становится самым слабым звеном в процессе.Часто легче угадать чей-то ответ, чем это пароль, особенно если вопросы подобраны не очень тщательно.
  • Предполагая, что электронные письма используются в качестве имени пользователя в вашей системе (что обычно рекомендуется по целому ряду причин), в ответе на запрос на сброс пароля не должно указываться, была ли найдена действительная учетная запись.В нем должно быть просто указано, что электронное письмо с запросом пароля было отправлено на указанный адрес.Почему?Ответ, указывающий, что электронное письмо существует / не существует, позволяет хакеру получить список учетных записей пользователей, отправив несколько запросов пароля (обычно через HTTP-прокси, такой как burp suite) и отметив, найдено ли электронное письмо.Для защиты от сбора данных при входе в систему вы должны убедиться, что функции, связанные с входом в систему / авторизацией, не предоставляют никаких указаний на то, когда в форме сброса входа / пропуска был введен действительный адрес электронной почты пользователя.

Для получения дополнительной информации проверьте Руководство для хакеров веб-приложений.Это отличное руководство по созданию моделей безопасной аутентификации.

Редактировать:Что касается вопроса в вашей правке - я бы предложил:

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

Здесь идет на компромисс между простотой использования и безопасностью.Вы должны сбалансировать это в зависимости от контекста - достаточно ли важна безопасность для вас и ваших пользователей, чтобы оправдать это неудобство?

Отправьте электронное письмо с новым паролем.

ПРИНУДИТЕЛЬНО смените пароль, когда они поступят, и введите новый пароль.

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

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

Также отправляйте пользователям подтверждения смены пароля.

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

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

Я бы подумал, что вариант 2 (gbrandt's) был бы отличным методом, если бы он сочетался с некоторой личной информацией, которая у вас уже есть для пользователя.т.е. дата рождения.

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

Только те, кто хорошо его знает, могут досадить ему, сбросив его пароль!Это не может быть незнакомец или бот

При 5 или 7 неверных сочетаниях адреса электронной почты и даты рождения пользователь получает электронное сообщение о том, что его пароль был запрошен для сброса и не удалось ввести из-за неправильных учетных данных.Затем сброс пароля для этой учетной записи приостанавливается на 24 часа или любой желаемый период.

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

Что вы, ребята, думаете?

Вариант 1.является не хорошая идея, поскольку, как правило, о ней легко догадываются другие.Личная электронная почта Сары Пэйлин (я думаю, Yahoo) была взломана таким образом третьей стороной.

Другие варианты лучше, и в предыдущих постах были описаны детали.

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

Я реализовал JAVA-проект для этого варианта использования.Он находится на GitHub с открытым исходным кодом.Это прекрасно отвечает на ваш вопрос...реализован на Java.

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

Всему есть объяснение (и если чего-то не хватает - дайте мне знать ...)

Взгляните на: https://github.com/OhadR/Authentication-Flows

Увидеть a Демо-версия здесь.

Это клиентское веб-приложение, которое использует потоки аутентификации, с README со всеми пояснениями.это направляет вас к реализации: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top