据我所知,有两种合理的方法可以重置用户忘记的密码。
让用户输入他们的电子邮件地址,并将新的明文密码发送到他们的电子邮件地址。
链接被发送到他们的电子邮件地址,该地址在URL中有一个UID号码。点击此按钮会将用户带到网站上的表格,他们可以在那里选择自己的新密码。
哪种方法更可取?为什么?
如果使用方法1,也许第三方可以阅读电子邮件并获取新密码。 如果使用方法2,什么是阻止某人有条不紊地通过UID代码尝试访问表单来更改用户的密码?
答案 0 :(得分:31)
最好的模式是:
用户请求密码重置。最好是通过用户名来完成它 不要表明用户名是否存在(以避免可能 用户通过脚本列出)
使用userid,datetime在新数据库表中生成记录 请求(=当前日期时间)和您刚刚生成的GUID
您向用户发送邮件,指向密码重置页面 GUID(不是userid)作为参数
在此页面上,您应该检查GUID是否存在,以及 最终你可以设置一些到期日期(=用户有1天 重置,例如)
不要忘记将记录标记为“已使用”(带有一个额外的字段) 表)当用户重置密码时,你就可以停止了 最终的第二次尝试...
它可能更安全,但我认为这已经非常好......
答案 1 :(得分:9)
OWASP有一个很好的https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet
清单以下是步骤的快速摘要:
答案 2 :(得分:0)
通过询问验证问题来验证发件人是否是真实用户。
请勿在不在规划员工列表中的个人电子邮件上发送密码。
请勿在电子邮件的标题或正文中添加“密码”一词。
确保单独发送用户名和密码。
对于Office 365用户,请将其指向忘记密码区域或发送此链接https://passwordreset.microsoftonline.com
不要被用户吓倒,如果需要,请升级到IT经理。