NGINX ModSecurity WAF误判SQL注入攻击的配置优化咨询
解决ModSecurity误拦截合法西里尔文请求的配置方案
问题根源
本次误拦截是因为libinjection驱动的SQL注入检测规则,将URL编码后的西里尔文(如%u041e对应俄文字母О)误识别为攻击特征(日志中提到匹配到sos),而非实际存在SQL注入行为。
可行配置方案
方案1:针对特定参数添加规则例外
直接对触发误拦截的BoxOrgName参数,禁用对应的SQL注入检测规则。在ModSecurity配置文件(如modsecurity.conf或单独的规则文件)中添加以下规则:
SecRule ARGS:BoxOrgName "@rx ^.*$" \ "phase:2,nolog,pass,ctl:ruleRemoveById=942100,ctl:ruleRemoveById=942200"
- 说明:
942100是libinjection SQL检测的核心规则ID,942200是关联的辅助规则;若日志中显示的拦截规则ID不同,替换为实际ID即可。 - 优势:精准只放行目标参数,不影响其他请求的防护。
方案2:针对西里尔文编码特征跳过检测
针对包含西里尔文Unicode转义(%u04xx格式,西里尔文Unicode范围为U+0400至U+04FF)的请求,跳过SQL注入检测:
SecRule ARGS:BoxOrgName "@rx %u04[0-9A-Fa-f]{2}" \ "phase:2,nolog,pass,ctl:ruleRemoveById=942100"
- 说明:该规则仅当参数中出现西里尔文编码时才跳过检测,比方案1更精准,避免无差别放行参数内容。
方案3:更新OWASP核心规则集(CRS)
若使用的是OWASP Core Rule Set,新版本(如3.3.2及以上)已优化了非ASCII字符的检测逻辑,减少对西里尔文等非拉丁字符的误判。直接更新CRS到最新版本即可缓解此类问题。
注意事项
- 禁止全局禁用SQL注入检测规则,避免大幅降低WAF防护能力;
- 修改配置后需重启NGINX生效,同时测试合法请求是否正常通过,持续监控WAF日志确认防护有效性;
- 若后续仍有其他参数出现类似误拦截,可参照方案1/2的逻辑添加对应例外规则。
内容的提问来源于stack exchange,提问作者Marat
相关产品推荐
相关产品推荐

