好奇会话行为(文件名字符串长度)

Mar*_*tin 22 php session

我今天注意到,在我的会话文件中,有一些文件名远远小于其他文件,例如:

标准会话文件:

  sess_0020cc255681808f78c08b67cd88cbcea13f45ee7629754ed82ccb8b010cf83d2b353b7136847f2876d99f3297a5def5bcc62b433d6d56d7f1b301f82c833aad
Run Code Online (Sandbox Code Playgroud)

(5 + 128个字符文件长度)

特殊会话文件:

  sess_629aca24e094f17d02b3d105ebe9e5d4
Run Code Online (Sandbox Code Playgroud)

(5 + 32字符文件长度)

这个站点非常繁忙并且有很多流量(约22k访问者pcm),查看会话文件夹有~1%(实际上是0.92%)这些非常短的命名会话文件.

在去年(2015年)实施本网站重新设计之前,我过去曾经阅读了很多会议,并且从那里开始,我现在已经在我的php.ini:

session.cookie_httponly=1
session.use_only_cookies=1
session.cookie_secure=1
session.entropy_file=/dev/urandom
session.hash_function=whirlpool
session.session.use_trans_sid=0
session.entropy_length=32
Run Code Online (Sandbox Code Playgroud)

编辑(附加):

session.hash_bits_per_character = 4
Run Code Online (Sandbox Code Playgroud)

session.sid_length 未定义(不可定义),因为此构建使用PHP 5.6.2

据我所知,这应该是一般的罚款.我已经阅读了很少有关如何确保最小文件长度的其他主题,尽管我已经阅读了有关使用的各种内容,session.entropy_length但这似乎并不明显适用于此问题.

entropy_length值是我唯一不确定其使用和需要的值.

我的问题

  • 是什么导致1%的会话长度只有5 + 32个字符?
  • 如何设置它以使所有会话长度相同(5 + 128个chrs)

我意识到以下问题我可以尝试并看到它不会造成任何伤害,但如果上述解决方案预期用途 session.entropy_length ,那将是有用的知识.关于什么是entropy_length实际上是非常实用的文献似乎很少.

  • 会增加会话熵长度值会改善吗?[没有]

我认为会话名称冲突当前存在一个小的潜在问题,而且看起来很奇怪,如此多的会话文件如此奇妙地长,但是一个值得注意的少数群体相对较小.

更新

从评论中有一些细节,值得我总结一下:

  • 问题在于我的浏览器(!!)
  • 这是使用PHP 5.6.2版
  • [单个] WHM服务器上的LAMP堆栈.
  • 如果PHP-cli运行它可能/只会由服务器主机运行,虽然我真的怀疑它们正在运行它.我很了解他们,是一个体面的客户......
  • 我已经检查并确认网站htaccess文件没有对PHP的任何方面进行任何更改
  • 服务器运行时只有很少的错误日志(我上周有14个错误,9k次访问,错误所有404个来自机器人刮板试图入侵Wordpress [该网站不是wordpress].)
  • PHP是通过suPHP运行的(目前版本未知),我也在考虑更新suphp,但我怀疑这与这个问题直接相关.
  • 来自Ryan Vincents的建议我会在短于128级的会话时设置通知(希望从哪个地址开始)
  • 会话文件存储文件夹在PHP.ini中定义,因此如果使用外部PHP.ini,那么我希望会话出现在其他文件夹中,例如/temp.

Rob*_*bie 5

如果您的网站与您描述的一样受欢迎,这很可能是黑客/黑客攻击.黑客将定期访问网站并使用捕获的(在这种情况下)欺骗会话ID,他们将欺骗正常的32字节十六进制.

如果您修改cookie"PHPSESSID"以包含任何文本,PHP会选择它并创建具有该ID的会话以及相应的sess_ [sessionId]文件.从我的测试(你可以自己尝试)PHP将使用任何长度的ID并接受它并使用它,无论ini设置.

好消息是,如果你这样做,session_id()那么它将返回欺骗性的ID,这样你就可以了

  • 拒绝
  • 蜂蜜罐,或
  • 使用有效会话重新创建

但这不会停止正在创建的会话文件.

或者创建自己的会话处理系统并避免session_start(); 然后您可以在使用之前手动验证session_id格式.