1

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

当然,我可以忽略它并清除错误日志(当我完成扫描我的网站时),但我只是好奇并想知道为什么(以及是否有“修复”)?

供参考:

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

  • 我试过的扫描仪都是免费的 Firefox Add-ons;'SQL Inject Me'(由 Security Compass 提供)和 Websecurify。

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

  • 会话是基于文件的。

4

3 回答 3

2

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

您正在运行一个扫描仪,它正在浏览您的网站并试图操纵各种输入,然后分析响应以查看攻击是否成功。

当您session_regenerate_id(true)在页面上时,该方法调用会尝试删除当前会话并开始一个新会话。

在扫描仪上发生这种情况的原因是,扫描仪可能会通过一些典型用户不会采用的应用程序的路径。因此,如果扫描程序点击了一个执行 PHP 代码的 URL,该 URL 执行了其中的 PHP 代码session_regenerate_id(true)并且没有当前会话,那么您将收到该错误。

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

请让我知道,如果你有任何问题。

于 2012-09-27T15:05:55.707 回答
1

当然,我可以忽略它并清除错误日志(当我完成扫描我的网站时),但我只是好奇并想知道为什么(以及是否有“修复”)?

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

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

触发此事件的代码也是未知的。该函数session_regenerate_id()通常在会话管理的上下文中使用。

因为会话的概念不是那么容易掌握许多开发人员(包括我)在该领域经常犯错误。一些有用的调试功能:

于 2012-10-01T19:40:25.910 回答
-2

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

于 2013-11-13T16:49:53.043 回答