15

据我所知,有两种合理的方法可以重置用户忘记的密码。

  1. 让用户输入他们的电子邮件地址,并将新的明文密码发送到他们的电子邮件地址。

  2. 一个链接会发送到他们的电子邮件地址,该地址在 URL 中有一个 UID 号。单击此按钮会将用户带到网站上的表单,他们可以在其中选择自己的新密码。

哪种方法更可取,为什么?

如果使用方法一,也许第三方可以阅读电子邮件并获得新密码。如果使用方法 2,如何阻止有人有条不紊地通过 UID 代码尝试访问表单以更改用户密码?

4

3 回答 3

51

最好的模式是:

  1. 用户请求密码重置。最好是通过用户名来做,不要指出用户名是否存在(以避免可能的用户通过脚本列出)

  2. 您在新的数据库表中生成一条记录,其中包含用户 ID、请求的日期时间(= 当前日期时间)和刚生成的 GUID

  3. 您向用户发送一封邮件,指向以 GUID(而不是用户 ID)作为参数的密码重置页面

  4. 在此页面上,您应该检查 GUID 是否存在,最终您可以设置一些到期日期(例如,用户有 1 天的时间重置)

  5. 当用户重置密码时,不要忘记将记录标记为“已使用”(表中有一个额外的字段),以便您可以停止最终的第二次尝试......

它可能更安全,但我认为这已经很好了......

于 2013-04-15T14:55:12.437 回答
15

OWASP 有一个很好的清单https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

以下是步骤的快速摘要:

  1. 收集身份数据或安全问题
  2. 验证安全问题
  3. 通过侧通道发送令牌
  4. 允许用户更改密码
于 2014-06-22T19:03:07.017 回答
-4

通过询问验证问题来验证发件人是否是真实用户。

不要在不在平面员工列表中的个人电子邮件上发送密码。

不要在电子邮件的标题或正文中添加“密码”一词。

确保分别发送用户名和密码。

对于 Office 365 用户,将他们引导至忘记密码区域或发送此链接https://passwordreset.microsoftonline.com

不要被用户吓倒,如果需要,请上报给 IT 经理。

于 2018-03-06T06:20:12.743 回答