ModSecurity最大后限(PCRE限制错误)

时间:2013-08-14 08:18:19

标签: php apache security post mod-security

我一直有很多与Mod Security有关的问题。我正忙于为工作中的项目编写CMS,在开发编辑某个数据库记录的页面时,我一直收到403错误。经过几个小时的敲打我的桌子后,调整了一些代码,我最后只更改了我的表单发布到的脚本,以包含一个简单的echo "test";。即使提交到这个简单的页面也会引发403错误。我搞砸了我的表格,我最终发现,如果我减少了数据量,我发布的表单提交得很好(特别是我减少了textarea中的文本数量)。

检查完日志后(是的,这不是我做的第一件事 - 感叹)我注意到我从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"]

我一直在搞乱,谷歌搜索和改变规则几天无济于事。我似乎唯一能做的就是关闭这个虚拟主机的ModSecurity。我正在开发CMS时,这很好,但在生产中,这不是我想要做的事情。有没有人对导致此问题的原因以及如何排序有任何想法?日志似乎指出了与正则表达式限制有关的某些规则,但是由于更改我的帖子接收脚本只是打印出单词test我没有对它们做任何事情(尽管我已经尝试通过{{1增加限制}和SecPcreMatchLimit)。似乎我发送的数据量存在问题。

2 个答案:

答案 0 :(得分:2)

我刚刚解决了一个类似的问题,在多个规则中触发了PCRE限制错误。我觉得mod-security然后将请求标记为恶意是错误的,因为它爆炸了!

我将您提到的两个设置从默认值提升到500,000,默认值为1,500,如本帖所述,它解决了我的问题。

  

PCRE匹配限制的默认值非常非常低   ModSecurity的。你通常可以达到500K,而不会伤害你的设置。但   供您参考:PCRE匹配限制旨在减少   通过正则表达式进行DoS攻击的机会。所以通过提高   限制你在这方面提高你的漏洞,但PCRE错误   从安全角度来看,情况要糟糕得多。我用500K的产品运行   通常:

     

SecPcreMatchLimit 500000 SecPcreMatchLimitRecursion 500000

https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/656

另见 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecPcreMatchLimit

答案 1 :(得分:1)

几个星期前我在PCRE模块上遇到了类似的问题,它与backtrack_limits有关。

我假设SecPcreMatchLimitSecPcreMatchLimitRecursion与mod_security有关,但您是否尝试在php.ini文件中或在PHP执行时间内增加pcre模块的值?

pcre.backtrack_limitpcre.recursion_limit

您还可以使用以下函数preg_last_error()

确认问题是否与PCRE限制有关

您可以在此处查看更多内容:http://php.net/manual/en/function.preg-last-error.php

在这里:http://www.php.net/manual/en/pcre.constants.php

我希望这会有所帮助。