我在用着OWASP核心规则集3.2.0设置ModSecurity 3.0.4和ModSecurity-nginx。
如果我有这样的规则排除,则REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
:
SecRule REQUEST_URI "@beginsWith /api.php" \
"id:1015,\
phase:2,\
pass,\
nolog,\
ctl:ruleRemoveById=941160"
我如何将此排除限制到特定主机名?例如,wiki.example.com
。
答案1
使用REQUEST_HEADERS:Host
chained withREQUEST_URI
可以解决问题,但如果有多个网站需要或不需要排除,则维护起来会更困难。因此,另一种解决方案是禁用 Nginx 配置规则对于虚拟主机来说。
可以使用以下方法禁用某些规则modsecurity_rules
在特定server
&内location
:
server {
server_name wiki.example.com;
modsecurity on;
. . .
location /api.php {
modsecurity_rules '
SecRuleRemoveById 941160
';
}
}
同样的情况也可能发生阿帕奇,因为一些 Apache 用户稍后可能会根据标题找到这个问题。使用 Apache,您可以使用SecRuleRemoveById
/modsecurity_rules
指令
内部
VirtualHost
和Location
或LocationMatch
:<VirtualHost *:443> ServerName wiki.example.com . . . <LocationMatch "^/api.php"> <IfModule security2_module> SecRuleRemoveById 941160 </IfModule> <IfModule security3_module> modsecurity_rules 'SecRuleRemoveById 941160' </IfModule> </LocationMatch> </VirtualHost>
或者,尽管不建议, 即使
.htaccess
:<IfModule security2_module> <If "%{REQUEST_URI} =~ m#^/api.php#"> SecRuleRemoveById 941160 </If> </IfModule> <IfModule security3_module> <If "%{REQUEST_URI} =~ m#^/api.php#"> modsecurity_rules 'SecRuleRemoveById 941160' </If> </IfModule>
答案2
答案是REQUEST_HEADERS:Host
使用链, 像这样:
SecRule REQUEST_HEADERS:Host "wiki.example.com" \
"id:1017,\
phase:2,\
pass,\
nolog,\
chain"
SecRule REQUEST_URI "@beginsWith /api.php" \
"ctl:ruleRemoveById= 941160"