了解PHP会话熵

时间:2016-01-23 20:49:43

标签: php session entropy

session的{​​{1}}部分,有一个名为php.ini的指令。

我知道它曾用于生成会话ID"更随机"。

  • 如何使会话ID更随机?

  • 最大长度是多少?

  • 如果它的长度超过正在使用的session.entropy_length的位数怎么办?

1 个答案:

答案 0 :(得分:4)

session_id是客户端IP地址(32位)的散列,当前时间戳和微秒(52位),以及从php combined lcg()生成的值,Psuedo随机数生成器(PRNG) )功能(64位)。熵是148位。但是,不应将此数字视为绝对最小值,因为知道谁创建会话的IP地址和时间戳。

当可获得不期望的低量熵时,可以从会话id重构PRNG的种子。由于PHP在不同的生成器之间重用相同的熵源,因此更容易。

种子用于生成其他伪随机值,因此如果攻击者可以获得种子值,他可以预测所有未来的输出(包括但不仅仅是mt_rand()rand)。那不好。

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

如果您提供/dev/random之类的随机来源,则熵会更大,生成的session_id的强度会更强。