Лучший способ сделать код для “Забытого пароля”

сетевой веб-сайт, я хотел бы реализовать, забывают пароль. Я использую следующие шаги

  1. Форма, имеющая поле ввода для идентификатора для входа в систему и почтового идентификатора и КАПЧИ
  2. когда пользователь вводит детали и отправляет в бэкенде после того, как новый пароль проверки будет сгенерирован и замененный старый пароль в базе данных.
  3. Новый passowrd, отправляют пользователю в электронной почте.

Помогите мне, делаю ли я правильно или нет?

Есть ли какой-либо другой безопасный механизм для того же?

[РЕДАКТИРОВАНИЕ] Благодарит, я получил Ваш ответ. Действительно это - безопасный механизм. Но здесь я имею, немногие сомневаются

  1. Какое сообщение должно я показанный пользователю, когда он входит вошедший и адрес электронной почты на уровне страницы забытого пароля?
  2. Было ли сообщение тем же для действительного пользователя и злонамеренного пользователя?
  3. Преимущество использования маркера CSRF? Любая справка / ссылка
  4. Когда пользователь нажимает на ссылку затем, что должно я делать; потому что, поскольку я предполагаю, что пользователь должен, автоматически входя в их учетную запись - затем после этого у меня есть 2 выбора (сначала) отправляют новый пароль автоматически пользователю (вторая) новая форма будет показанный пользователю, где пользователь будет enetr старый пароль и новый пароль дважды?

Помогите?

8
задан cobbal 2 January 2010 в 06:39
поделиться

3 ответа

Я понимаю, зачем нужен CAPTCHA, но я бы использовал другой подход.

  1. При запросе сброса пароля проверьте, что за последние X минуты сброс для этой учетной записи еще не был запрошен. Если пароль уже был запрошен, проигнорируйте запрос сброса.
  2. Проверьте IP-адрес, запрашивающий сброс пароля. Если IP-адрес запрашивал сброс пароля в течение последних Y минут, игнорируйте запрос.
  3. Если проверка через 1 и 2 прохода, проверьте наличие учетной записи. Если он не игнорирует запрос.
  4. Если мы получили это далеко, сгенерируйте одноразовый токен, срок действия которого истекает через Z минут, и URL сброса пароля, который включает в себя этот токен. Отправьте это по электронной почте на зарегистрированный адрес. Когда URL будет загружен, попросите ввести новый пароль и сбросьте его.

Для тех, кто считает, что вы должны сообщить пользователю, куда отправлено электронное сообщение, я категорически не согласен с этим. Это "утечка информации", даже если вы ограничите ее доменным именем. Например, скажем, что я зарегистрировался на JeffAtwoodEatsBabies.com как blowdart. Если бы Джефф запросил сброс пароля для меня, а вы показали регистрационный домен, то он бы увидел idunno.org. Это мой личный домен и, таким образом, Джефф знал бы, что пользователь blowdart, на самом деле, я. Это плохая плохая вещь. Я не должен регистрироваться с помощью hotmail или gmail или чего-то еще, чтобы защитить себя от вашего кода, показывающего почтовый домен всем и вся.

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

И последнее, что вы можете сделать - добавить CSRF-токен на страницу запроса на сброс пароля, чтобы он не мог быть изгнан с других веб-сайтов.

Followup

So to answer your further questions.

  1. What message you show is up up to you.

    1. What message is up up to you. "Инструкции по сбросу вашего пароля были отправлены по электронной почте на зарегистрированный адрес электронной почты для этой учетной записи" - это одна из идей, но на самом деле это зависит от вашей аудитории.
    2. Уже адресовано выше.
    3. Википедия - это хорошая отправная точка. Как вы это делаете, зависит от вашей платформы и это совсем другой вопрос! Для ASP.NET вы можете посмотреть на мой проект кодеплексов, http://anticsrf.codeplex.com или посмотреть на ViewStateUserKey.
    4. При нажатии на ссылку я сначала проверяю токен в URL на соответствие имени пользователя, к которому он применяется, затем я либо разрешаю пользователю ввести новый пароль, либо генерирую новый и отправляю его по электронной почте. Вы не можете подсказка для старого, так как весь смысл в том, что пользователь забыл его!
13
ответ дан 5 December 2019 в 07:11
поделиться

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

Конечно, это на 100% зависит от безопасности почтового клиента, но с точки зрения удобства использования это трудно превзойти.

.
4
ответ дан 5 December 2019 в 07:11
поделиться

Существует множество способов реализации этого. Как вы уже говорили, генерация нового пароля и отправка его на зарегистрированный электронный адрес - это один из способов. Однако, я бы не советовал вам идти по этому пути, так как мой пароль сбрасывается каждый раз, когда кто-то пытается угадать мой пароль.

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

Электронное письмо было отправлено на ********@hotmail.com. Пожалуйста, проверьте свой почтовый ящик, чтобы продолжить.

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

.
6
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: