php - 了解 PHP session 熵

标签 php session entropy

php.inisession 部分,有一个名为 session.entropy_length 的指令。

我知道它用于使 session ID 的生成“更加随机”。

  • 它如何使 session ID 更加随机?

  • 最大长度是多少?

  • 如果它的长度超过了正在使用的哈希的位数怎么办?

最佳答案

session_id 是客户端 IP 地址(32 位)、当前时间戳和微秒(52 位)以及由 php 组合 lcg() 生成的值的哈希值 code>,伪随机数生成器 (PRNG) 函数(64 位)。熵是148位。但是,这个数字不应被视为绝对最小值,因为 IP 地址和时间戳对于创建 session 的人来说是众所周知的。

当可用熵量过低时,可以根据 session ID 重建 PRNG 的种子。由于 PHP 在不同生成器之间重用相同的熵源,这变得更加容易。

种子用于生成其他伪随机值,因此如果攻击者可以获得种子值,他就可以预测所有 future 的输出(包括但不限于 mt_rand()兰特)。这可不好。

session.entropy_length 是将从熵文件中读取的字节数,通常为 /dev/urandom/dev/arandom >(from documentation)。

如果您提供像/dev/random这样的随机源,那么熵就更大,生成的session_id的强度也更强。

关于php - 了解 PHP session 熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34968688/

相关文章:

c - 取决于srand和seed的rand算法是什么?

r - 计算熵

php从数组中取消设置与preg_match函数匹配的键

session - 如何检测 session 是否即将过期?

php - $agi->get_data 导致 php 脚本立即返回

php - 带有自定义字段参数的 WP_Query(复选框)

javascript - 我在页面加载时将整个 $_SESSION 变量放入 json 对象中。虽然这对我有用,但这是一个好的做法吗?

algorithm - ID3机器学习算法中统计熵概念相关的一些疑惑

php - 将多行的 php 字符串传递给 javascript 函数/变量

php - 如何在 yii2 中获取当前 Controller