生成重置密码令牌的最佳实践
-
21-12-2019 - |
题
应该构建如何构建重置密码令牌的最佳实践?我在想:
随机17个字符[A-ZA-Z0-9] +全局唯一ID +随机17个字符[A-ZA-Z0-9]。
在重置密码令牌上有更好的解决方案,或行业标准吗?
解决方案
有一些重要的要点需要考虑。
- 代码应该是真正随机的(从mcrypt_dev_urandom读取),不应该从其他用户相关信息中解冻。
- 理想情况下,代码是base62编码(a-z a-z 0-9),以避免URL的问题。
- 商店数据库中的令牌的哈希 ,否则具有读取访问数据库的攻击者可以重置任何帐户。
- 您将令牌与哈希算法(如sha512),没有盐。如果令牌非常强(具有0-9a-Z A-Z的最小长度20),则这是安全的。从理论上你必须检查在在数据库中输入之前是否存在这样的哈希,实际上可以忽略不计。我实现了一个密码重置类可以处理这样的令牌。
- 你用bcrypt和盐哈肯。这允许缩短令牌,但您无法搜索数据库中的散列令牌。相反,您必须在链接中包含一个Row-ID以查找令牌。
这导致您在用户点击链接后必须在数据库中找到令牌的散列的问题。存储令牌有两种可能的方法:
不隶属于 StackOverflow