Подтвердить что ты не робот

Забыли пароль: какой лучший способ реализации функции забытого пароля?

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

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

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

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

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

4b9b3361

Ответ 1

  • Я лично отправлю электронное письмо со ссылкой на короткую страницу, которая позволяет им установить новый пароль. Сделайте имя страницы своего рода UID.
  • Если это не понравится вам, то отправьте им новый пароль и заставите их изменить его при первом доступе, также сделайте.

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

Ответ 2

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

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

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

EDIT. Что касается вопроса в вашем редактировании, я бы предложил:

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

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

Ответ 3

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

НАЧАТЬ изменение пароля при поступлении и ввести новый пароль.

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

Посмотрите: https://github.com/OhadR/Authentication-Flows

Смотрите Демо здесь.

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