php - 为忘记密码生成随机 token 的最佳实践

标签 php security random timestamp token

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

问题
生成自定义长度的随机/唯一 token 的最佳实践是什么?

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

最佳答案

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

因此,代码如下:

//$length = 78 etc
$token = bin2hex(random_bytes($length));
<小时/>

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

更多详情请参见

关于php - 为忘记密码生成随机 token 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38015123/

相关文章:

php - swift 邮件程序中的 DKIM 签名

php - 使用php将数据插入mysql表时遇到问题

java - 在服务器端表单提交处理程序中检查引用是一个好习惯吗?

security - Symfony2 登录事件监听器和 security.interactive_login 事件从未使用 FOSUser 触发

random - 不同进程使用不同的随机生成器

php - Laravel Input::file 返回空数组,而 $_FILES 有数据

javascript - Woocommerce 2 可变产品下拉列表,强制第一个始终显示所有选项

python - Pyramid .security : Is getting user info from a database with unauthenticated_userid(request) really secure?

javascript - 页面加载时的随机图像

machine-learning - GAN 的随机噪声