mod_security - 超出 PCRE 限制

Par*_*roX 12 mod-security pcre apache-2.2

几乎在每个请求中,我都会收到以下错误:

Rule execution error - PCRE limits exceeded (-8): (null).

经过一堆谷歌搜索后,唯一的解决方案似乎是

a) 在您的 httpd.conf 中添加以下内容

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000
Run Code Online (Sandbox Code Playgroud)

b) 将以下内容添加到您的 php.ini

pcre.backtrack_limit = 10000000
pcre.recursion_limit = 10000000
Run Code Online (Sandbox Code Playgroud)

c) 使用使用-disable-pcre-match-limit选项编译的版本。


我正在运行以下内容:

Apache/2.5.12 ( http://www.modsecurity.org/ ) 的ModSecurity 。

Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze8 with Suhosin-Patch mod_ssl/2.2.16 OpenSSL/0.9.8

对于 ModSec 我的规则,我使用的是 OWASP ModSecurity 核心规则集项目版本 (CRS) 版本 2.2.3,这是本文发布时的最新版本。

我的 httpd.conf 主要包括:

<IfModule security2_module>
    SecUploadDir /var/asl/data/suspicious
    SecDataDir /var/asl/data/msa
    SecTmpDir /tmp
    SecAuditLogStorageDir /var/asl/data/audit

    Include modsecurity.d/modsecurity_crs_10_config.conf
    Include modsecurity.d/activated_rules/*.conf

    SecRuleEngine On

    # Debug log
    SecDebugLog /var/log/apache2/modsec_debug.log
    SecDebugLogLevel 3

    # Serial audit log
    SecAuditEngine RelevantOnly
    SecAuditLogRelevantStatus ^5
    SecAuditLogParts ABIFHZ
    SecAuditLogType Serial
    SecAuditLog /var/log/apache2/modsec_audit.log

    SecPcreMatchLimit 150000
    SecPcreMatchLimitRecursion 150000

</IfModule>


<IfModule mod_php5.c>
    php_admin_flag pcre.backtrack_limit 10000000
    php_admin_flag pcre.recursion_limit 10000000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

其中在我的modsecurity.d目录中只是 CRS 在其安装文件中的所有默认规则。我还将 pcre 限制设置为 150000000 和 100000000000 及更多,但不可用。

所以总结一下:

解决方案a并且b不起作用,我更喜欢不这样做c......因为我不太了解/喜欢编译。

有人有其他想法吗?

Jan*_*nen 7

神圣的递归,蝙蝠侠!

我声称您的 mod_security 规则有问题。这种递归似乎是不必要的,并且很可能会给您的服务器造成严重的负载。修复规则和/或 Apache 配置,不要试图用任意大的数字“修复”这个问题。