必须启用SecRequestBodyAccess才能检测POST体SQL注入,否则如{"username":"admin' OR 1=1 --"}等攻击将被忽略;需全局配置SecRequestBodyAccess On,并配合路由级策略、multipart解析增强、前置过滤及严格参数校验。

WAF插件必须启用SecRequestBodyAccess才能检测POST体中的SQL注入
微服务网关(如Spring Cloud Gateway、Kong、云原生网关)集成WAF时,SecRequestBodyAccess默认是关闭的。这意味着所有藏在POST /login、PUT /api/user等请求体里的SQL注入(比如{"username":"admin' OR 1=1 --"})根本不会被规则引擎扫描到。
实操要点:
- 若用ModSecurity插件(如云原生网关WAF插件),需在全局配置中显式写入
SecRequestBodyAccess On,不能只放在某个路由块内 - 后端是Spring Boot:确保网关转发时携带原始body,检查
spring.cloud.gateway.httpclient.response-timeout未截断大请求 - 后端是Node.js/Java via proxy_pass:对应location或route配置中必须加
proxy_pass_request_body on - 验证方式:发一个带
' OR 1=1 --的JSON POST请求,查WAF审计日志里是否有REQUEST_BODY字段匹配记录
路由级WAF策略比全局开关更可控,但需避开multipart/form-data盲区
微服务常按业务域拆分API(如/auth/**、/order/**),直接在网关层对高风险路由启用WAF比全站开规则更精准。但multipart/form-data类型请求(文件上传+表单参数)是常见漏点——OWASP CRS默认对这类请求体解析不完整,UNION SELECT可能藏在filename或description字段里却未触发拦截。
建议配置:
- 对
/auth/login、/admin/*等路径强制启用useCRS: true+secRules追加自定义规则,例如:SecRule ARGS_POST "@rx (?i)union[\s%09%0a%0c%0d\xa0]select" "id:1001,deny,status:403,msg:'SQLi in POST args'" - 上传接口(
Content-Type: multipart/form-data)单独配置语义分析规则,监控filename字段是否含.php、../或SQL关键字 - 禁用
SecRequestBodyLimit硬限制(如设为100MB),避免大文件上传时body被截断导致检测失效
绕过检测的高频变形必须在网关层前置过滤,不能只靠WAF规则引擎
真实攻击流量中,union select大概率以UnIoN%09SeLeCt、SEL/**/ECT、0x756e696f6e等形式出现。WAF规则引擎(尤其基于正则的)解析这些变形有延迟,且单次请求耗时增加5–15ms。微服务网关更适合用轻量机制做第一道筛子。
推荐做法:
- 在网关HTTP层用
map指令快速标记可疑参数(仅限GET):map $args $sql_flag { ~*[\"'`;\(\)\/\*%00] 1; ~*(?i)(select|union|sleep|benchmark) 1; default 0; } - 对POST请求,在网关Filter中预检
Content-Type和body前2KB,用简单正则匹配十六进制编码(0x[0-9a-f]{4,})、双URL编码(%25[0-9a-f]{2})等特征,命中即return 403 - 注意:这类前置过滤无法替代WAF语义分析,但能拦掉80%自动化扫描器的原始payload,降低WAF引擎负载
严格模式要绑定具体参数类型,否则数字ID字段也可能被误杀
微服务API大量使用路径参数(/user/{id})或查询参数(?page=1&size=10)。开启WAF“严格模式”时,若未指定参数类型,规则可能把page=1里的1误判为1=1恒真表达式而拦截。
关键配置项:
- 对路径参数
id、order_id等,明确设置校验规则:SecRule ARGS:id "@rx ^\d+$" "id:1002,deny,status:403,msg:'Non-digit id'" - 对搜索类参数
q、keyword,启用WAF的语义分析引擎,而非简单关键词黑名单;否则q=apple和q=app'le会被同等放行 - 金融/政企类服务务必开启
information_schema访问监控,该行为在合法业务中几乎不存在,可直接阻断
真正容易被忽略的是:WAF规则生效依赖完整的请求链路还原。如果网关做了Header清洗(如删掉X-Forwarded-For)、或后端服务自己重写了Content-Type,WAF可能因协议解析失败而跳过检测——这比规则写得不够强更致命。

















