将特定页面的 mod_security 设置为 detectionOnly?

Set mod_security to detectionOnly for a specific page?

如果整个网站的 mod_security 设置为 ON,有没有办法可以将特定页面设置为 detection_only?

用例是应用程序用于配置网站,使用CSS或js很常见,但很可能使modsecurity抛出XSS规则异常。我只想在那些页面上检测这些异常但不阻止它们。但是在所有其他页面上,我希望阻止规则例外。

更具体的细节:该应用程序实际上是另一个 Windows 服务器上的 IIS 应用程序 运行,而 mod_security 是 运行 在 linux 服务器。 haproxy 将传入的请求定向到 apache,apache 通过 modsecurity 接收请求;如果通过,它会将其反向代理回 haproxy,然后再将其传递给 IIS。

== incoming request ==> haproxy ==> apache 
                                      v
                                    mod_security
                                      v
        IIS machine <== haproxy <== mod_proxy

(是的,使用 haproxy 有一个很好的理由。我们有数百个 https 证书,我们可以将 haproxy 指向一个充满它们的文件夹,它会根据SNI https 请求。还没有找到任何其他可以做到这一点的东西。)

所以在 apache 端没有一个目录可以让 .htaccess 文件有意义,至少在我看来是这样。

被视为 DetectionOnly 的路径将匹配主机 admin.mysite.com 和路径 ^/site/[a-zA-Z0-9-]+/Settings$

像这样的东西应该可以工作(未经测试):

SecRule REQUEST_HEADERS:Host "@streq admin.mysite.com" "phase:1,id:1234,chain"
    SecRule REQUEST_URI "^/site/[a-zA-Z0-9-]+/Settings$" "ctl:ruleEngine=DetectionOnly"

只需将该规则添加到其他规则之前,并确保 id 是唯一的(我以 1234 为例)。

规则引擎将为下一个请求重置,因为 ctl 更改仅针对此请求。