重置忘记的用户密码的最佳做法

问题描述 投票:9回答:3

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

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

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

如果使用方法1,则第三方可能会阅读电子邮件并获取新密码。如果使用方法2,什么是阻止某人有条不紊地通过UID代码尝试访问表单来更改用户的密码?

plaintext password-recovery forgot-password
3个回答
30
投票

最好的模式是:

  1. 用户请求密码重置。最好是通过用户名进行,并且不指示用户名是否存在(以避免可能的用户通过脚本列出)
  2. 使用userid,requesttime的datetime(=当前日期时间)和刚刚生成的GUID在新数据库表中生成记录
  3. 您向用户发送邮件,指向密码重置页面,其中GUID(而不是用户标识)作为参数
  4. 在此页面上,您应该检查GUID是否存在,并最终可以设置一些过期日期(例如,用户有1天重置)
  5. 当用户重置密码时,不要忘记将记录标记为“已使用”(表中有一个额外的字段),以便您可以停止最后的第二次尝试...

它可能更安全,但我认为这已经相当不错......


9
投票

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

以下是步骤的快速摘要:

  1. 收集身份数据或安全问题
  2. 验证安全问题
  3. 通过侧通道发送令牌
  4. 允许用户更改密码

0
投票

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

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

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

请务必单独发送用户名和密码。

对于Office 365用户,请将其指向忘记密码区域或发送此链接https://passwordreset.microsoftonline.com

不要被用户吓倒,如果需要,请升级到IT经理。

© www.soinside.com 2019 - 2024. All rights reserved.