Cha*_*eus 12 security passwords password-recovery
用户忘记了密码,并且(几乎)所有会员网站都需要一种方法来帮助用户重新访问.
我想实现常见的场景:
以下是我计划实现的方法(C#/ ASP.NET MVC):
member.ResetToken)中的成员实体上,并通过电子邮件向他们发送带有该GUID的链接(发送的电子邮件将通知他们只能使用此链接一次)member.ResetToken.如果找到他们的帐户,请向他们显示密码重置表单,并在他们完成重置后清除member.ResetToken其帐户.这是我的问题:保持这样(他们可以随时,现在或将来使用该链接重置密码)或添加时间戳以限制他们重置密码的时间长度?
从用户体验的角度来看,只要你准备好就重置密码的能力很好,但我想确保我不会忽视这可能带来的一些安全问题.
你的方案确实有效,但有些方面可以改进.但首先是关于时间限制的原始问题:
让我们问相反的问题:为什么令牌仍然无效?
没有任何优势,当两年后点击重置链接时,用户可以在大约一小时内点击链接,或者他可能忘记了链接(并且可以在必要时请求新的链接).另一方面,能够阅读电子邮件并不一定意味着攻击者必须破解电子邮件帐户,例如办公室中的开放电子邮件客户端,丢失的移动电话, (丢失)USB驱动器上的备份......
最重要的改进是,您应该只在数据库中存储令牌的哈希值.有权访问数据库(SQL注入)的人可能会要求为他喜欢的任何电子邮件地址重置密码,并且因为他可以看到新令牌,他可以使用它来设置自己的密码.
然后我会将这些重置信息存储在一个单独的表中.在那里,您可以存储用户标识,散列标记,到期日期以及链接是否已被使用的信息.那时用户不处于特殊状态.
也许我误解了这一点,但重置链接应指向密码重置的特殊页面.当用户进入登录页面时,应该没有特殊处理,登录页面不应该知道有未决的密码重置.
重置令牌应该是不可预测的,这可以通过真正随机的代码实现,从操作系统的随机源读取.
| 归档时间: |
|
| 查看次数: |
14948 次 |
| 最近记录: |