高PHP session.sid_bits_per_character和session.sid_length的优缺点?[关闭]

pros and cons of high php session.sid_bits_per_character and session.sid_length? [closed]

提问人:Ranald Fong 提问时间:9/10/2023 最后编辑:Ranald Fong 更新时间:9/10/2023 访问量:90

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

2个月前关闭。

正如标题所问的,

高php session.sid_bits_per_character和session.sid_length的优缺点是什么? 显而易见的优点是,更高的位和长度意味着更难暴力破解或重叠,但除了模糊的兼容性问题之外,还有很多或任何缺点吗?

我问这个问题,因为这是手册提供的信息。https://www.php.net/manual/en/session.configuration.php#ini.session.hash-function

我可以想象可能的缺点,但这些最多是愚蠢的猜测。

  • 更长的长度意味着更大的 cookie 和更长的处理时间,对于 RDBS id 匹配来说也更长(具有唯一的键列约束?但作为关键列,应该不重要吧?
  • 生成时间更长?也许,但可能是有影响力的??
  • 长度越长,使用资源越多,但位大小会占用更多资源吗?对于长度和/或位的增加,它是否明显更多。

有什么理由不将这 2 个设置更改为 php.ini 文件中的以下内容吗?

sid_bits_per_character = 6
sid_length = 256

编辑:添加了使用更多资源的可能缺点

PHP 安全

评论

0赞 Markus Zeller 9/10/2023
一如既往:视情况而定。时间越长,字符越多,越安全。我认为您不会注意到任何速度影响。此外,由于 cookie 始终在标头中传输,因此多一点大小并不重要。如果是关于速度的,你需要对你的系统进行基准测试。您还可以使用 memcached 或 redis 作为替代存储 SID 而不是文件系统存储的替代方法。
0赞 Ranald Fong 9/10/2023
@MarkusZeller感谢您的评论。我还没有任何类似于系统的东西,只有一个 rdbms 和 xampp。我假设使用文件系统存储是 sid 匹配最慢的,rdbms 键列接下来,memcached/redis 最快,因为它们是直接键/val 引用,我是否正确?或者 memcached/redis 几乎等同于带有主键列的 rdbms (mysql) 表?但总的来说,我从你那里得到的是,这并不重要,更长+更多的位更好。
0赞 Markus Zeller 9/10/2023
这里也要看情况。*NIX 文件系统运行速度很快,甚至比内存缓存更快(因为处理连接)。如果您需要在多个服务器实例上共享键/值存储,并且仅在遇到任何性能瓶颈时进行更改以优化任何内容,我会使用一个。如前所述,您需要测量您的系统。
0赞 Ranald Fong 9/11/2023
@MarkusZeller 让我说明一些其他条件 a) 我唯一的系统是我的 PC,b) 我目前正在使用 RDBMS 进行会话存储,c) 我正在使用 phpsession。当然,其他类型的存储更好/更差。但问题不在于我的 MY 系统,而在于更高的 SID 长度和位大小是否会对速度/负载/性能产生任何有意义的影响。
1赞 Ranald Fong 9/11/2023
@MarkusZeller 谢谢,我将研究“正确的索引”和“内存表”的东西。它们看起来很有趣,尤其是mySQL的内存表,因为答案是,由于sid是短暂的,因此在重新启动时丢失会话表似乎是可以的。

答:

1赞 O. Jones 9/10/2023 #1

婴儿猝死综合症是短暂的,而不是永久性的。因此,您需要存储的数量与您拥有的活跃用户数量成正比,而不是总用户数。当您使用 RDBMS 进行会话存储时,这很好:在大型表中,随机主键不是很有效,但会话表(主键为 sid)就没有那么大了。

短暂性还意味着您将来可以更改 sid 格式,唯一的运营成本是在切换时取消所有活动会话。如果您宣布计划的停机时间,您可以偶尔摆脱这种情况。

SID 越长越安全。将 6 位添加到随机 sid 中会使猜测难度增加 64 倍。192 位 sid(32 字节,每字节 6 位)就好了,不会引起支付卡行业信息安全审计员等人员的注意。更长也可以,但 256 字节是矫枉过正。几个字节长的 cookie 值的额外成本、CPU、存储和带宽太小,无法衡量。通过更有效地压缩图像等操作,您可以节省数千倍的服务器和带宽资源。比从sids中削减字节的回报要大得多。

避免使用 MD5 或 SHA-1 哈希算法。使用 SHA-224 或至少同样安全的东西。审计师不喜欢安全性较低的那些。使用更好的值可以省去向审计员解释较差的值对于短暂的短暂值如何仍然可以的麻烦。

php 中的会话子系统允许您在站点流量增长到需要它时从文件系统会话存储切换到 RDBMS 或缓存服务器存储:当您需要多个负载平衡的 Web 服务器计算机时。您不必从第一天起就对应用程序的这一部分进行过度设计。只需正确地进行会话变量开发,就可以为未来做好准备。

评论

0赞 Ranald Fong 9/11/2023
因此,要分解它,因为它是短暂的,它对 RDBMS PK 列的影响即使不能忽略不计,也是微乎其微的,但如果行计数变得很大,则更长/随机的键可能会有问题,因为它如果效率不高。否则,SID 长度/位大小性能成本通常在其会话存储系统之外,可以忽略不计。我说得对吗?谢谢!你还提出了 pw 哈希算法,但 phpsession 默认为 blowfish,我查了一下,它似乎至少比 md5 和 sha-1 好,不确定 sha-224,blowfish 和 sha-224 一样好还是更好?
0赞 O. Jones 9/11/2023
是的,河豚很好。