session_regenerate_id():当通过安全扫描程序运行站点时,会话对象销毁失败?

时间:2012-09-23 19:57:10

标签: php security session

这是正常的吗,因为我尝试了两种不同的扫描仪,它们似乎都产生了相同的错误,所以我假设它可能与扫描仪的工作方式有关 - 因为我在查看时没有收到这些错误该网站通常(该网站也运行良好 - 如预期的那样)。

当然,我可以忽略它并清除错误日志(当我完成扫描我的网站时),但我只是好奇并且想知道原因(如果有'修复')?< / p>

供参考:

  • 扫描网站时;我反复得到相同的错误(在包含session_regenerate_id(true)的页面上)。

  • 我尝试的扫描仪都是免费的Firefox附加组件; 'SQL Inject Me'(由Security Compass提供)和Websecurify。

  • 我在我的网站上运行这些测试(通过'localhost')。

  • 会话是基于文件的。

3 个答案:

答案 0 :(得分:2)

问题在于您的代码和处理会话的方式。

您正在运行扫描程序,该扫描程序正在通过您的网站并尝试操作各种输入,而不是分析响应以查看攻击是否成功。

如果页面上有session_regenerate_id(true),则该方法调用会尝试删除当前会话并启动新会话。

在扫描仪上发生这种情况的原因是扫描仪可能正在通过典型用户不会采取的应用程序。因此,如果扫描程序遇到执行其中包含session_regenerate_id(true)并且没有当前会话的PHP代码的URL,则会收到该错误。

理想情况下,您应该在调用session_regenerate_id(true)之前进行检查以查看当前会话是否存在。如果不是,则应将用户带到登录页面并要求他们重新进行身份验证。

如果您有任何疑问,请与我们联系。

答案 1 :(得分:1)

  

当然,我可以忽略它并清除错误日志(当我完成扫描我的网站时),但我只是好奇并且想知道原因(如果有'修复')?< / p>

将PHP版本升级到当前的稳定版本:PHP 5.4.7。

再次运行安全检查。如果错误仍然发生(我非常怀疑),这需要进一步检查。在这种情况下(甚至更早)你应该在问题中添加session configuration(它比你想象的要大)。

触发此操作的代码也是未知的。函数session_regenerate_id()通常用于会话管理的上下文中。

因为会话的概念不容易掌握,许多开发人员(包括我)更频繁地在该领域中做错误。一些有用的调试功能:

答案 2 :(得分:-2)

尝试在session_write_close();之前使用session_regenerate_id(true)。 问题的一个可能原因是您的代码正在创建并行查询。我遇到了同样的麻烦,这帮助了我。