为忘记密码生成随机令牌的最佳实践

2023-11-25

我想为忘记密码生成标识符。我读到我可以通过使用 mt_rand() 的时间戳来做到这一点,但有些人说时间戳可能不是每次都是唯一的。所以我在这里有点困惑。我可以使用时间戳来做到这一点吗?

Question
生成自定义长度的随机/唯一令牌的最佳实践是什么?

我知道这里有很多问题,但在阅读了不同人的不同意见后,我变得更加困惑。


在 PHP 中,使用random_bytes()。原因:您正在寻找获取密码提醒令牌的方法,并且,如果它是一次性登录凭据,那么您实际上有一个数据需要保护(即 - 整个用户帐户)

因此,代码如下:

//$length = 78 etc
$token = bin2hex(random_bytes($length));

Update: 之前的版本这个答案指的是uniqid()如果存在安全问题而不仅仅是唯一性问题,那么这是不正确的。uniqid()本质上只是microtime()与一些编码。有一些简单的方法可以准确预测microtime()在您的服务器上。攻击者可以发出密码重置请求,然后尝试使用几个可能的令牌。如果使用 more_entropy,这也是可能的,因为附加熵同样很弱。谢谢@NikiC and @ScottArciszewski指出这一点。

欲了解更多详情,请参阅

  • http://phpsecurity.readthedocs.org/en/latest/Insufficient-Entropy-For-Random-Values.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为忘记密码生成随机令牌的最佳实践 的相关文章