【发布时间】:2011-02-14 21:21:59
【问题描述】:
通过邮件重置用户密码的正常流程是这样的:
- 生成随机字符串并将其存储在数据库表中
- 给用户的电子邮件字符串
- 用户点击包含字符串的链接
- 已针对数据库验证字符串;如果匹配,则重置用户的密码
但是,维护表格和过期旧字符串等似乎有点不必要的麻烦。这种替代方法有什么明显的缺陷吗?
- 生成用户现有密码的 MD5 哈希
- 向用户发送电子邮件哈希字符串
- 用户点击包含字符串的链接
- 通过再次散列现有密码验证字符串;如果匹配,则重置用户的密码
请注意,用户的密码已经以散列和加盐形式存储,我只是再次对其进行散列以获得唯一但可重复的字符串。
是的,有一个明显的“缺陷”:这样生成的重置链接在用户更改密码(点击链接)之前不会过期。不过,我真的不明白为什么这会是一个问题——如果邮箱被盗,用户无论如何都会被搞砸。并且不存在重复使用的风险,因为一旦用户密码更改,重置链接将不再匹配。
【问题讨论】:
标签: security reset forgot-password