忘记密码:实现忘记密码功能的最佳方法是什么?

Dar*_*ein 51 authentication passwords change-password forgot-password

我想知道在网站上创建忘记密码功能的最佳方法是什么.我见过很多,这里有几个或组合:

  • 密码问题/答案(1个或更多)
  • 使用新密码发送电子邮件
  • 在屏幕上给出新密码
  • 通过电子邮件确认:必须单击链接以获取新密码
  • 要求用户输入新密码的页面

您会在忘记密码功能中添加哪些组合或附加步骤?我想知道他们如何申请新密码以及他们最终如何获得密码.

我正在操作委托人,无法检索密码; 必须提供/生成新密码.

编辑我喜欢Cory所说的关于如果用户名存在不显示的内容,但我想知道要显示什么.我认为问题的一半是用户忘记了他们使用的电子邮件地址,显示某种"不存在"的消息是有用的.有解决方案吗

Gre*_*ndt 46

  1. 我个人会发送一封电子邮件,其中包含一个短期页面的链接,可以让他们设置一个新密码.使页面名称成为某种UID.
  2. 如果这对您没有吸引力,那么向他们发送新密码并强制他们在首次访问时更改密码也会这样做.

选项1更容易.

  • 选项1还具有不易受用户的DoS攻击的优点.例如,某人经常点击选项2中的"重置密码"链接,因此用户实际上被锁定在他们的帐户之外.你可以防范它,但为什么要这么麻烦?选项1是要走的路...... (13认同)

Cor*_*use 25

一些重要的安全问题:

  • 密码短语问题/答案实际上会降低安全性,因为它通常会成为流程中最薄弱的环节.猜测某人的答案通常比输入密码更容易 - 特别是如果没有仔细选择问题.
  • 假设电子邮件作为系统中的用户名运行(通常由于各种原因而推荐),对密码重置请求的响应不应指示是否找到了有效帐户.它应该简单地说明密码请求电子邮件已发送到提供的地址.为什么?指示电子邮件存在/不存在的响应允许黑客通过提交多个密码请求(通常通过诸如burp套件的HTTP代理)并且注意是否找到电子邮件来收集用户帐户的列表.为了防止登录收获,您必须确保没有登录/身份验证相关功能提供有关何时在登录/通过重置表单上输入有效用户的电子邮件的任何指示.

有关更多背景信息,请查看Web Application Hackers Handbook.这是创建安全身份验证模型的绝佳读物.

编辑:关于编辑中的问题 - 我建议:

"密码请求电子邮件已发送到您提供的地址.如果电子邮件不会很快到达,请检查您的垃圾邮件文件夹.如果没有收到电子邮件,则您提供的电子邮件中不存在任何帐户."

在易用性和安全性之间进行了权衡.您必须根据具体情况对此进行平衡 - 您和您的用户的安全性是否足以证明此不便之处?

  • 你不能确定一封电子邮件是否已经在注册时被使用了吗? (4认同)

Wil*_*ung 8

使用新密码发送电子邮件.

当密码到达时强制更改密码并输入新密码.

这确保了想要密码的人将是唯一进入该帐户的人.

如果电子邮件被嗅到,有人可以进入帐户(当然),但真正的一方会立即发现(因为他们刚刚发送的密码不起作用).

还向用户发送密码更改确认.

如果有人获得了新密码,然后发送了一封电子邮件,上面写着"用于更改密码的密码",那么他们会感到非常困惑,如果他们不这样做,他们会与管理员交谈.