Я ищу лучший способ для реализации функции "забыл пароль".
Я выступаю с 2 идеями:
Когда пользователь нажимает на забытый пароль, он должен ввести имя пользователя, адрес электронной почты и, возможно, дату рождения или фамилию. Затем письмо с временным паролем будет отправлено на адрес электронной почты пользователя. Пользователь использует временный пароль для входа и сбрасывает свой пароль.
Аналогично, но электронное письмо будет содержать ссылку, позволяющую пользователю сбросить свой пароль.
Или кто-нибудь может предложить мне лучший и безопасный способ? Я также думаю отправить временный пароль или ссылку, заставить пользователя сбросить пароль в течение 24 часов, иначе временный пароль или ссылка не будут использоваться. Как это сделать?
Ответы:
Обновление: пересмотрено в мае 2013 года для лучшего подхода
password_change_requests
с колоннамиID
,Time
иUserID
. Когда новый пользователь нажимает кнопку, в таблице создается запись.Time
Столбец содержит время , когда пользователь нажал кнопку «Забыли пароль». ЭтоID
строка. Создается длинная случайная строка (скажем, GUID), а затем хэшируется как пароль (это отдельная тема сама по себе). Этот хеш затем используется как «ID» в таблице.http://www.mysite.com/forgotpassword.jsp?ID=01234567890ABCDEF
. Страница Forgotpassword.jsp должна быть в состоянии получить параметр ID. Извините, я не знаю Java, поэтому не могу быть более конкретным.ID
из URL-адреса, снова хэширует и проверяет таблицу. Если такая запись существует и ее возраст не превышает, например, 24 часа, пользователю будет предложено ввести новый пароль .источник
ID
,UserID
,Time
,TokenHash
.. Вы сгенерирует две длинные, случайные строки Поместите первую строку ( «ID») вID
столбце, хэш второго ( «маркер» ) и поместите хеш вTokenHash
столбец. Создайте ссылку какforogotPassword.jsp?id=asdasd&token=asdasd
. Токен в ссылке НЕ хэширован. Имеет ли это смысл сейчас?Все зависит от вашего сайта и уровня безопасности, которого вы пытаетесь достичь, но основной процесс для веб-приложения выглядит примерно так:
Пользователь переходит на страницу «забыл мой пароль» и вводит свое имя пользователя или адрес электронной почты (в зависимости от того, что является уникальным), чтобы запросить сброс пароля.
При желании на этом этапе вы можете подтвердить запрос, запросив дополнительную информацию, такую как ответ на предварительно заданный секретный вопрос или дату их рождения и т. Д. Этот дополнительный уровень не дает пользователям получать электронные письма, которые они не запрашивали.
Найдите учетную запись пользователя. Сохраните временный пароль (обычно GUID) и отметку времени для записи учетной записи. Отправьте пользователю электронное письмо с временным паролем.
Пользователь либо щелкает ссылку, содержащую временный пароль и идентификатор пользователя в электронном письме, либо переходит на страницу «забыл мой пароль» и копирует и вставляет временный пароль и его идентификатор. Пользователь вводит свой новый пароль и подтверждает его.
Найдите запись пользователя и, если текущее время находится в пределах указанного времени (например, 1 час) от отметки времени, сохраненной на шаге 2, то хешируйте и сохраните новый пароль. (Очевидно, только если временные пароли совпадают!). Удалите временный GUID и метку времени.
Принцип здесь заключается в том, что пользователю отправляется временный пароль по электронной почте, который позволяет ему изменить свой пароль. Первоначально сохраненный пароль (его следует хешировать!) Никогда не заменяется временным паролем, если пользователь его запомнил.
Исходный пароль никогда не будет отображаться пользователю, так как он должен быть хеширован и неизвестен.
Обратите внимание, что этот процесс полностью зависит от безопасности учетной записи электронной почты пользователя. Так что это зависит от уровня безопасности, которого вы хотите достичь. Обычно этого достаточно для большинства сайтов / приложений.
источник
Трой Хант делает несколько замечательных замечаний в своей статье « Все , что вы когда-либо хотели знать о создании функции безопасного сброса пароля» . Наиболее значимые выдержки:
...
...
...
...
Он делает еще много хороших замечаний о том, как избежать утечек информации, CAPTCHA, двухфакторной аутентификации и, конечно же, основных рекомендаций, таких как хеширование паролей. Я думаю, что важно отметить, что я не согласен с Троем в отношении полезности вопросов безопасности, предпочитая скептицизм Брюса Шнайера в этой практике :
источник
Я пойду с:
источник
Когда вы отправляете какую-либо информацию по электронной почте, она не будет защищена. Есть слишком много способов, чтобы кто-то мог получить это. Это была бы детская игра для опытного хакера, который хочет украсть вашу информацию.
Воздерживайтесь от отправки любой личной информации, такой как пароли и информация о доходах, по электронной почте, так как она может стать ОЧЕНЬ УДОВОЛЬСТВУЮЩЕЙ для вас и вашей организации в случае утечки или кражи такой информации. Серьезно подумайте о безопасности. Требуется только один инцидент, чтобы все кирпичи упали.
Что касается восстановления пароля, внимательно прочитайте Best Practices .
РЕДАКТИРОВАТЬ: Обновленная ссылка
источник
Как уже говорилось, это зависит от требуемого уровня безопасности, однако, если вам нужен более высокий уровень, некоторые новые решения, которые я видел, включают в себя;
Отображение половины временного пароля после подтверждения личности пользователя (секретный вопрос, адрес электронной почты и т. Д.), А другая половина отправляется на учетную запись электронной почты. Если учетная запись электронной почты была взломана, маловероятно, что одному и тому же человеку также удалось выполнить атаку «человек посередине». (При посещении правительства Великобритании)
Подтверждение личности с помощью электронной почты и другого носителя - например, кода, отправленного с помощью текста на зарегистрированный мобильный телефон. (Видно на eBay / PayPal)
Поскольку где-то между этими двумя крайностями реализация вопросов безопасности может быть способом, упомянутым DaveG.
источник
Если вы включите адрес электронной почты при регистрации. Кнопка «забыть пароль» отправляет электронное письмо на этот адрес электронной почты. Это гарантирует, что информация отправляется на доверенный адрес электронной почты.
(Если база данных не взломана, но тогда ничего не безопасно).
источник
Вот три очень хорошие ссылки, которые предоставляют информацию о сбросе пароля:
http://jtauber.com/blog/2006/03/20/account_management_patterns/
(Не позволяйте пользователям подтверждать с помощью GET): http://www.artima.com/forums/flat.jsp?forum=106&thread=152805&start=15&msRange=15
http://fishbowl.pastiche.org/archives/docs/PasswordRecovery.pdf
Надеюсь, это поможет. Они наверняка помогли мне понять проблему.
источник
Я бы применил уникальные адреса электронной почты для всех учетных записей.
Тогда это просто вопрос отправки ссылки на временную страницу, которая позволяет человеку изменить свой пароль. (разрешить 24 часа или меньше)
Учетная запись электронной почты пользователя является самой слабой ссылкой в этом сценарии.
источник
Никогда не отправляйте пароль пользователю по электронной почте. Даже если он генерируется автоматически. Лучший подход (рекомендуется и используется SANS и другими):
Если он не нажимает на ссылку в течение 24 часов, отключите ее (чтобы она больше не меняла пароль).
Никогда не меняйте пароль без согласия пользователя. Это означает, что не отправляйте новый пароль по электронной почте только потому, что кто-то нажал на ссылку забытого пароля и выяснил имя учетной записи.
источник