Php ModSecurity最大post限制(PCRE限制错误)

Php ModSecurity最大post限制(PCRE限制错误),php,apache,security,post,mod-security,Php,Apache,Security,Post,Mod Security,我在国防部的安全问题上遇到了很多麻烦。我正忙于为工作中的一个项目编写CMS,在开发一个页面来编辑某个数据库记录时,我不断收到403个错误。在我的头撞了几个小时桌子,调整了一些代码之后,我终于改变了我的表单发布到的脚本,包含了一个简单的echo“test”。即使提交到这个简单的页面也会引发403错误。我把我的表格弄得一团糟,我最终发现,如果我减少了数据量,我就可以发布提交的表格了(特别是我减少了文本区域内的文本量) 在检查日志后(是的,这不是我做的第一件事——叹气),我注意到我从ModSecuri

我在国防部的安全问题上遇到了很多麻烦。我正忙于为工作中的一个项目编写CMS,在开发一个页面来编辑某个数据库记录时,我不断收到403个错误。在我的头撞了几个小时桌子,调整了一些代码之后,我终于改变了我的表单发布到的脚本,包含了一个简单的
echo“test”。即使提交到这个简单的页面也会引发403错误。我把我的表格弄得一团糟,我最终发现,如果我减少了数据量,我就可以发布提交的表格了(特别是我减少了文本区域内的文本量)

在检查日志后(是的,这不是我做的第一件事——叹气),我注意到我从ModSecurity收到了许多错误,例如:

[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//global": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"]
[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//ip": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"]
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Rule execution error - PCRE limits exceeded (-8): (null). [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"]
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Access denied with code 403 (phase 2). Match of "streq 0" against "TX:MSC_PCRE_LIMITS_EXCEEDED" required. [file "/etc/httpd/conf.d/mod_security.conf"] [line "93"] [msg "ModSecurity internal error flagged: TX:MSC_PCRE_LIMITS_EXCEEDED"] [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"]

我已经胡闹了好几天了,在谷歌上搜索和修改规则都没有用。我唯一能做的就是关闭这个vhost的ModSecurity。在我开发CMS时,这对我来说很好,但在生产中,这并不是我真正想要做的事情。有没有人知道是什么导致了这个问题,以及如何对其进行分类?日志似乎指向与正则表达式限制有关的某种规则,但由于更改了我的接收后脚本以仅打印单词test,我没有对它们做任何操作(尽管我尝试通过
SecPcreMatchLimit
secpcrematchlimitraction
提高限制)。我发送的数据量似乎有问题。

几周前,我在PCRE模块上遇到了类似问题,这与回溯限制有关

我假设
SecPcreMatchLimit
secpcrematchlimitrusion
与mod_安全性相关,但是您是否尝试在php.ini文件中或在php执行期间增加pcre模块的值

pcre.backtrack\u limit
pcre.recursion\u limit

您还可以使用以下函数
preg\u last\u error()

您可以在此处看到更多信息:

在这里:


我希望这有帮助。

我刚刚解决了一个类似的问题,一个大的post触发PCRE限制了多个规则中的错误。我觉得mod security仅仅因为请求爆炸就将其标记为恶意请求是错误的

我将您提到的两个设置从本文建议的默认设置1500提高到了500000,解决了我的问题

PCRE匹配限制的默认值非常非常低 ModSecurity。你通常可以达到500公里而不会损坏你的电视机。但是 仅供参考:PCRE匹配限制旨在减少 通过正则表达式进行DoS攻击的可能性。因此,通过提高 限制您在这方面提出的漏洞,但PCRE错误 从安全角度来看,情况更糟。我在prod中运行500K 通常:

SecPcreMatchLimit 500000 SecPcreMatchLimit 500000

也看到

对不起,我已经有一段时间没有发布此问题了。我想我在php.ini文件中设置了那些PCRE值(当然,在使用
ini\u set()
或任何东西执行时都没有这样做)。也。。我甚至无法执行
preg\u last\u error()
,因为页面甚至会为一个简单的
echo“test”设置403我的问题似乎是ModSecurity出于某种原因将我发送的数据视为可疑数据,而不是实际上与PCREHalf有任何关系。这个答案是错误的。它肯定与PHP无关,因为Apache正在运行ModSecurity模块。实际上,Jonathon明确表示,如果他关闭ModSecurity,他的页面就可以正常工作。@AlexisWilke是对的,这与PHP“无关”。编译成mod_security/2的PCRE将达到极限。这肯定是SecPcreMatchLimit设置——这为我解决了这个问题。我们正在使用.net API,到目前为止,我们已经启用了WAF in检测节点。我们正在获取多个日志(执行错误-超出PCRE限制),因此我们担心,当我们将WAF置于预防模式时,WAF是否会阻止这些我们正在获取“执行错误-超出PCRE限制”的请求或者它会将请求传递到下一个管道。我也有同样的问题,就像现在我有两个Apache进程以100%的CPU运行。。。在8核上,这在某种程度上并不太糟糕,但也意味着一些用户没有得到服务!