Mod_security有时会阻止我的 ajax 脚本 - 我怎么能找出原因


Mod_security is sometimes blocking my ajax script - how can I find out why?

我已经使用php和mysql构建了某种CMS应用程序。一切都在本地主机上运行良好,所以我已将其移至网络。现在,当有人添加新文章时,我遇到了奇怪的问题。有时它只是正常添加,有时用户会收到此错误:

不可接受 所请求资源的适当表示形式 /path_to/file.php 无法在此找到 服务器。

在谷歌上呆了一段时间后,我发现mod_security阻止了我的脚本(或类似的东西)。有什么方法可以让我明白为什么它会阻止我的脚本?

我对mod_security不是很熟悉,但据我了解,它可以通过强制执行一些规则为 Web 应用程序提供另一级安全性。那么,我是否可以查看哪个规则阻止了我的应用,以便我可以修复它?

一些附加信息:

/path_to/file.php(发生此"不可接受"错误的文件)是.php仅用于 AJAX 的文件。我通过 POST 发送一些数据,我也发送一些文件(图片、文本文档等)。服务器上的文件上传限制为 20MB。目前我正在发送 17 张图片(约 10MB),但它仍然失败(我收到"不可接受"错误)。但我也尝试只发送一张图片和文档,并且没有问题。

编辑:我正在使用共享主机(带有 CPanel)。

mod_security能够在日志文件中记录所有块。您可以在该日志文件中确切地看到它是什么规则。

在大多数情况下,我使用Emil指出的日志文件。

mod_Security创建两个单独的日志文件,并且 Apache 也会在其自己的日志中报告错误。两者都很有用。实际上,如果您在Apache中发现错误,它应该为您提供阻止POST工作的规则的mod_security文件和行号。

现在,在大多数情况下,他们检测到一个无效的标头,通常缺少HTTP协议所期望的内容(尽管他们测试了一些不需要的东西,但99.9%的时间都存在。

在mod_security提供的两个文件中,其中一个没有被创建的可能性不大:审计文件,它在将事务的所有细节写入磁盘时使用非常大的磁盘空间。

在开机自检的情况下,变量的数量或变量的定义是否正确是mod_security检测到的常见错误。

在 Ubuntu (Debian) 上,日志文件最终位于/var/log/apache2/...(Apache output) 和/var/log/apache2-more/...(mod_security)。