JSON 请求体实验证据,展示正常 JSON 返回 200、SQLi-like 和 XSS-like 请求返回 403,以及 OWASP CRS 规则 ID。
两套栈共放行 2 个正常 JSON 请求,并阻断 4 个包含 SQLi-like 与 XSS-like 字段的受控请求。

    实验状态

    对象
    ModSecurity 与 Coraza 的 JSON 请求体检测
    状态
    已完成动手实测
    更新
    2026-07-26

    证据原则

    WAFWiki 会区分已验证的动手实测、冒烟实测、架构图和方法论说明。任何本地实验都只证明记录环境中的有限路径,不代表完整生产就绪。

    环境

    可复现信息

    内容类型

    application/json

    请求路由

    go-httpbin 2.21.0 的 POST /anything

    规则集

    两条路径均使用 OWASP CRS 4.25.0,所选默认配置启用请求体检查

    ModSecurity 栈

    ModSecurity 3.0.16 + ModSecurity-nginx 1.0.4

    Coraza 栈

    Coraza 3.7.0 + coraza-caddy 2.5.0 + Caddy 2.11.2

    JSON 用例

    正常订单备注、SQLi-like username 字段、XSS-like comment 字段

    命令

    如何复现实验

    发送正常 JSON 请求体

    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。

    运行受控 JSON 用例

    scripts/run-waf-evidence-lab.sh

    脚本把相同 3 个 JSON 请求体分别送入两套 WAF,并记录 6 个决策。

    提取 JSON 结果

    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 请求体

    2 / 2 返回 200

    同一正常订单式 JSON 对象通过两套 WAF 到达上游。

    SQLi-like JSON 字段

    2 / 2 返回 403

    两套栈都通过 CRS 942100 识别 username 字段,并达到阻断阈值。

    XSS-like JSON 字段

    2 / 2 返回 403

    两套栈都通过 CRS 941100 识别 comment 字段,日志中还出现其他 XSS 规则。

    解析字段证据

    可见 ARGS:json.*

    日志引用 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

    证据上下文

    JSON 子集在两条路径上使用相同路由和请求体。

    证据确认这 3 个对象中的字段被解析;它不能代表所有 JSON 结构、Content-Type 变体、解析歧义或请求体大小限制。

    共享 JSON 请求体测试拓扑,相同请求分别通过 ModSecurity NGINX 与 Coraza Caddy 到达同一上游。

    开放证据

    下载经过安全筛选的结果文件

    文件公开状态矩阵和固定版本摘要,不发布原始容器日志或无关本地数据。

    限制

    这个结果不能证明什么

    相关研究

    继续研究 ModSecurity 与 Coraza 的 JSON 请求体检测