我一直有很多与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
)。似乎我发送的数据量存在问题。
答案 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有关。
我假设SecPcreMatchLimit
和SecPcreMatchLimitRecursion
与mod_security有关,但您是否尝试在php.ini文件中或在PHP执行时间内增加pcre模块的值?
pcre.backtrack_limit
和pcre.recursion_limit
您还可以使用以下函数preg_last_error()
您可以在此处查看更多内容:http://php.net/manual/en/function.preg-last-error.php
在这里:http://www.php.net/manual/en/pcre.constants.php
我希望这会有所帮助。