我有一个带有 mod_security 2.8.0-5.25 的 apache 2.2.29-1.4,它是带有 mod_proxy_http 的本地 java 应用程序的反向代理。
我对某些 URL 有误报,并且想仅根据给定的 URI 将某些 OWASP 规则列入白名单。
目前全局将规则列入白名单
SecRuleRemoveById 960010
完美运行
但两者
<LocationMatch ^/(myapp/mymethod.do.*)$>
SecRuleRemoveById 960010
ProxyPassMatch http://localhost:8080/$1
</LocationMatch>
和
<Location "/myapp/mymethod.do">
SecRuleRemoveById 960010
</Location>
ProxyPass /myapp/mymethod.do http://localhost:8080/myapp/mymethod.do
ProxyPassReverse /myapp/mymethod.do http://localhost:8080/myapp/mymethod.do
不要将规则列入白名单。
我也尝试添加新的 mod_security 规则来修改现有规则,但将 URI 列入白名单总是失败......
有什么见解吗?
答案1
960010 是第 1 阶段规则。第 1 阶段运行前 <location>
指令已处理。
因此,您需要编写一条规则,让 ModSecurity 而不是 Apache 为您进行位置过滤。
像这样:
SecRule REQUEST_URI "^/myapp/mymethod.do" "phase:1,id:12345,nolog,ctl:ruleRemoveById=960010"
这基本上会创建另一条仅针对此 URL 触发的规则并删除此规则。请注意,必须在定义规则 960010 之前添加此规则。我已将规则 ID 指定为 12345,但请将其更改为小于 100,000 的任何免费 ID(高于此 ID 为 OWASP 等规则集保留)。
有关所有语法的更多详细信息,请参阅参考手册: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual