生成密码重置的密码

nut*_*les 12 php hash erlang-otp

我正在做一个允许用户重置密码的模块.我注意到大多数网站如何提供包含具有唯一哈希的查询字符串的确认链接.

我的问题是:每次相同的用户请求忘记密码时,如何生成此唯一哈希?我应该将此哈希存储在数据库中并在以后使用它进行验证吗?它会安全吗?或者我应该创建一些生成一次性密码的算法?我怎样才能生成OTP?

Art*_*cto 27

是的你应该

  1. 生成随机重置令牌.参见例如这个答案.
  2. 将其存储在数据库中(可能具有到期时间)
  3. 使用重置令牌向用户发送电子邮件.
  4. 用户使用查询字符串中的重置令牌访问重置密码页面.
  5. 检查数据库以查看与重置令牌关联的用户以及是否未通过到期时间.
  6. 如果所有内容都检出,请允许用户重置密码并从数据库中删除重置令牌.

关于重置令牌的生成(或者你想要调用的任何东西)似乎有很多混乱.请阅读我所链接的答案,不要用哈希和弱种子重新发明轮子.

  • 附加建议:在存储到数据库之前总是散列重置密码,因为它也可以临时用作用户密码(我的意思是它可以像普通用户密码一样访问用户帐户). (5认同)