内容类型
application/json
WAFWiki 原创实验
JSON 请求体实测:在 OWASP CRS 4.25.0 下,记录 ModSecurity 与 Coraza 对正常 JSON、SQLi-like 和 XSS-like 字段的实际处理结果。

证据原则
WAFWiki 会区分已验证的动手实测、冒烟实测、架构图和方法论说明。任何本地实验都只证明记录环境中的有限路径,不代表完整生产就绪。
环境
application/json
go-httpbin 2.21.0 的 POST /anything
两条路径均使用 OWASP CRS 4.25.0,所选默认配置启用请求体检查
ModSecurity 3.0.16 + ModSecurity-nginx 1.0.4
Coraza 3.7.0 + coraza-caddy 2.5.0 + Caddy 2.11.2
正常订单备注、SQLi-like username 字段、XSS-like comment 字段
命令
curl -i -X POST -H 'Content-Type: application/json' \
--data '{"name":"Alice","note":"order 123"}' \
http://127.0.0.1:18182/anything在已记录配置中,正常 JSON 请求体通过 Coraza 路径返回 HTTP 200。
scripts/run-waf-evidence-lab.sh脚本把相同 3 个 JSON 请求体分别送入两套 WAF,并记录 6 个决策。
awk -F, 'NR == 1 || $2 ~ /json/ { print }' \
docs/lab-evidence/waf-engine-comparison-2026-07-26-requests.csv输出 6 条 JSON 记录:2 个正常 HTTP 200,4 个受控 HTTP 403。
观察结果
正常 JSON 请求体
同一正常订单式 JSON 对象通过两套 WAF 到达上游。
SQLi-like JSON 字段
两套栈都通过 CRS 942100 识别 username 字段,并达到阻断阈值。
XSS-like JSON 字段
两套栈都通过 CRS 941100 识别 comment 字段,日志中还出现其他 XSS 规则。
解析字段证据
日志引用 ARGS:json.username 与 ARGS:json.comment,说明这些字段被解析而非只作为不透明字符串处理。
clean body: {name: Alice, note: order 123} -> 200 on both stacks
SQLi-like field: json.username -> CRS 942100 -> 403 on both stacks
XSS-like field: json.comment -> CRS 941100 -> 403 on both stacks
blocking evaluation: CRS 949110
JSON decisions: 6 total, 6 matched expectations证据上下文
证据确认这 3 个对象中的字段被解析;它不能代表所有 JSON 结构、Content-Type 变体、解析歧义或请求体大小限制。

开放证据
文件公开状态矩阵和固定版本摘要,不发布原始容器日志或无关本地数据。
查看 6 个 JSON 决策在完整 20 条矩阵中的原始记录。
查看组件、镜像、规则版本、采样和限制。
限制
相关研究