【发布时间】:2013-10-16 05:38:13
【问题描述】:
用户忘记了密码,并且(几乎)所有会员网站都需要一种方法来帮助用户重新登录。
我想实现常见的场景:
- 用户访问网站,尝试登录,但无法登录,然后意识到他们忘记了密码 - 废话!
- 用户输入邮箱地址并点击“忘记密码”
- 用户收到带有密码重置链接的电子邮件
这是我打算如何实现它(C#/ASP.NET MVC):
- 当用户输入电子邮件并点击“忘记密码”按钮时,我的网站将生成一个 GUID,将其存储在数据库中的成员实体 (
member.ResetToken) 中,并通过电子邮件向他们发送 URL 中带有该 GUID 的链接(发送的电子邮件将通知他们只能使用此链接一次) - 用户单击该链接,我的网站会根据该 URL 中的
member.ResetToken查找他们的帐户。如果找到他们的帐户,请向他们显示密码重置表单,当他们完成重置后,它会从他们的帐户中清除member.ResetToken。
这是我的问题:保持这样(他们可以在现在或将来随时使用该链接重置密码)或添加时间戳以限制他们必须重置密码的时间?
从用户体验的角度来看,在您准备就绪时重置密码的能力非常棒,但我想确保我没有忽略这可能引发的一些安全问题。
【问题讨论】:
-
生成重置请求并通过电子邮件发送并设置时间限制,但不要更改密码。通过更改密码并发送重置,很容易爆出某人的密码:)
-
这不是我描述的。 ;) 密码由用户更改。当他们单击“忘记密码”按钮时,会向他们发送带有密码重置令牌的 URL。 GUID 是密码重置令牌(尽管我可能不会使用 GUID,而是更随机的东西)。我在问一次性使用令牌与使用限时令牌相比是否足够安全。不过还是谢谢。
-
是的,我明白你在说什么,看看我的回答。
标签: security passwords password-recovery