Забыли пароль:каков наилучший метод реализации функции "Забыли пароль"?
-
22-08-2019 - |
Вопрос
Мне интересно, каков наилучший метод для создания функции "Забыли пароль" на веб-сайте.Я видел довольно много из них, вот несколько или комбинация из:
- вопрос-пароль / ответ (1 или более)
- отправить электронное письмо с новым паролем
- на экране введите новый пароль
- подтверждение по электронной почте:необходимо нажать на ссылку, чтобы получить новый пароль
- страница, требующая от пользователя ввести новый пароль
Какую комбинацию или дополнительные шаги вы бы добавили к функции "Забыли пароль"?Мне интересно о том, как они запрашивают новый пароль и как они в конечном итоге его получают.
Я использую принципал, который не может быть восстановлен паролем;необходимо ввести/сгенерировать новый пароль.
Редактировать Мне нравится то, что сказал Кори о том, чтобы не отображать, существует ли имя пользователя, но мне интересно, что отобразить вместо этого.Я думаю, половина проблемы заключается в том, что пользователь забыл, какой адрес электронной почты он использовал, что полезно для отображения какого-то сообщения "не существует".Есть какие-нибудь решения?
Решение
- Лично я бы отправил электронное письмо со ссылкой на краткосрочную страницу, которая позволяет им установить новый пароль.Сделайте название страницы каким-нибудь UID.
- Если вам это не нравится, то вполне подойдет отправка им нового пароля и принудительное изменение его при первом доступе.
Вариант 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