在session
的{{1}}部分,有一个名为php.ini
的指令。
我知道它曾用于生成会话ID"更随机"。
如何使会话ID更随机?
最大长度是多少?
如果它的长度超过正在使用的session.entropy_length
的位数怎么办?
答案 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/arandom
(from documentation)。
如果您提供/dev/random
之类的随机来源,则熵会更大,生成的session_id
的强度会更强。