【问题标题】:Understanding PHP Session Entropy了解 PHP 会话熵
【发布时间】:2016-04-30 08:25:17
【问题描述】:

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

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

  • 如何让 Session ID 更加随机?

  • 最大长度是多少?

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

【问题讨论】:

  • 1.你可能不应该与它混为一谈。 2.答案在文档中。 php.net/manual/en/…
  • 我投票决定将此问题作为离题结束,因为 SO 不能替代阅读文档。
  • @ceejayoz Document 没有回答任何问题。 “它从文件中读取”然后呢?这是如何应用的(未回答)?最大长度是多少(未回答)?如果位超过哈希(未回答)怎么办。请解释一下文档如何以任何方式回答我的问题。
  • 先说明你通过搞乱值来解决什么问题。快速搜索“会话 ID 是如何生成的”会产生许多 PHP 文档,以及 stackoverflow.com/questions/18937651/…
  • @ceejayoz 感谢您提供 php 源代码。现在一切都清楚了!我在 Google 上搜索“会话熵”,结果令人失望。

标签: php session entropy


【解决方案1】:

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

当可用的熵非常低时,可以从会话 id 重建 PRNG 的 种子。由于 PHP 在不同的生成器之间重用了相同的熵源,这更加容易。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2014-09-10
    • 1970-01-01
    • 2014-06-14
    • 2013-05-14
    相关资源
    最近更新 更多