验证合法的现有会话cookie的更快方法

时间:2019-03-31 19:40:31

标签: php security session session-cookies

多年来,我遇到了一些情形,其中一些(尽管不是全部)漏洞本身不会损害系统的完整性,但是漏洞组合可以轻松做到这一点。 (显然应该解决所有漏洞)。尽管主要问题在底部以粗体显示,但我仍在寻找一些小问题/说明。这个问题的背景是关于在考虑性能是重要的次要因素的同时最大化安全性。

我一直在进行一些压力测试,并且其中一种工具设法产生了此错误:

  

session_start():会话ID太长或包含非法字符,有效字符为a-z,A-Z,0-9和'-'

太好了,我有三个选择:

  1. 运行昂贵的regular expression
  2. 在当前IP上运行昂贵的数据库检查,以查看存储的会话是否匹配。
  3. 验证会话文件已在服务器上存在(例如,涉及使用ini_get('session.save_path')之类的东西)。

为了避免使用正则表达式,并使用一些基本逻辑和时间顺序,请在缺少某些内容时纠正我(这不是问题本身):

  1. 如果cookie不存在,那么 PHP将为会话选择并设置一个名称,从而消除了对正则表达式的 initial 需求。
  2. 一旦将会话cookie发送到客户端,客户端就会在标头中发送cookie ,可能会更改会话名称,这就是潜在的潜在威胁开始的地方。
  3. 我认为PHP不能最初生成损坏的/非法的会话名称,因此,如果不存在与会话cookie匹配的文件,则该文件要么已过期,要么可以被认为是非法,忽略和新的会话Cookie生成。

在这一点上,可以做一个假设,尽管可能无法通过同行评审:只需检查文件是否存在以及字符串长度可能是所需的最低限度验证。但是,我仍在考虑以下情况:

  1. 哪些已知漏洞(如果有)可以直接或间接允许攻击者访问以创建或修改PHP会话目录中的现有会话cookie文件?
  2. 我们可以设置和检查该目录的CHMOD权限吗,并且这样做的费用比使用正则表达式便宜吗?
  3. 在这种情况下,哪些因素(尽管未知因素)起作用?

现在,如果服务器中其他地方存在某种漏洞,该漏洞以某种方式允许访问PHP会话目录,则一个小问题是该会话目录应设置为什么CHMOD权限?

在PHP中验证会话cookie有效性的最便宜的方法是什么?

有些人可能不关心“费用”或抛出另一个数据库查询或另一个正则表达式,因为在这些情况下的态度是“足够快”,但是它也避免了迫使开发人员扩大对语言的理解他们正在一起工作。有想法吗?

0 个答案:

没有答案