我正在做一个允许用户重置密码的模块。我注意到大多数网站都提供了一个确认链接,其中包含具有唯一哈希值的查询字符串。
我的问题是:每次同一用户请求忘记密码时,如何生成这个唯一的哈希值?我应该将此哈希存储在数据库中并稍后使用它进行验证吗?会安全吗?或者我应该创建某种生成一次性密码的算法?如何生成 OTP?
是的你应该
- 生成随机重置令牌。参见例如这个答案 https://stackoverflow.com/questions/3290283/what-is-a-good-way-to-produce-a-random-site-salt-to-be-used-in-creating-passwor/3291689#3291689.
- 将其存储在数据库中(可能有过期时间)
- 使用重置令牌向用户发送电子邮件。
- 用户使用查询字符串中的重置令牌访问重置密码页面。
- 检查数据库以查看与重置令牌关联的用户以及是否尚未超过到期时间。
- 如果一切正常,则允许用户重置密码并从数据库中删除重置令牌。
关于重置令牌(或任何你想称呼它的东西)的生成似乎有很多困惑。请阅读我链接到的答案,不要用哈希值和弱种子重新发明轮子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)