20 请求结果矩阵,展示 ModSecurity 与 Coraza 对正常、SQLi、XSS、Query 和 JSON 用例的一致 HTTP 200/403 结果。
两个固定版本栈都匹配全部 20 个预期决策;这只能证明所选矩阵中的行为,不能当作通用准确率排名。

    实验状态

    对象
    ModSecurity + NGINX vs Coraza + Caddy
    状态
    已完成动手实测
    更新
    2026-07-26

    证据原则

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

    环境

    可复现信息

    宿主运行环境

    macOS aarch64 上的 Docker Desktop 29.2.0,分配 10 CPU 与 7.65 GiB 内存

    共享规则集

    两条路径均使用 OWASP CRS 4.25.0、阻断偏执等级 1、入站异常阈值 5

    ModSecurity 栈

    ModSecurity 3.0.16、ModSecurity-nginx 1.0.4,NGINX 镜像按标签与摘要固定

    Coraza 栈

    Coraza 3.7.0、coraza-caddy 2.5.0、Caddy 2.11.2

    共享上游

    mccutchen/go-httpbin:2.21.0,镜像摘要 sha256:809250d14e94397f4729f617931068a9ea048231fc1a11c9e3c7cb8c28bbab8d

    请求样本

    每个引擎 10 个用例:6 个正常、2 个 SQLi-like、2 个 XSS-like 决策

    命令

    如何复现实验

    复现完整请求矩阵

    scripts/run-waf-evidence-lab.sh

    只有当所有实际状态都与 expected 列一致时,脚本才以 0 退出。

    查找状态偏差

    awk -F, 'NR == 1 || $6 != $5 { print }' \
      docs/lab-evidence/waf-engine-comparison-2026-07-26-requests.csv

    最终实验不存在偏差,因此只输出 CSV 表头。

    查看固定实验环境

    cat docs/lab-evidence/waf-engine-comparison-2026-07-26.json

    JSON 应记录宿主信息、组件版本、镜像 ID、请求结果、采样、资源快照和限制。

    观察结果

    本轮动手实测说明了什么

    完整矩阵

    20 / 20 匹配

    两个栈对每个预先声明用例都给出了预期 HTTP 状态。

    正常决策

    12 / 12 返回 200

    两个引擎分别放行同一组 6 个代表性正常输入。

    SQLi-like 决策

    4 / 4 返回 403

    查询和 JSON 中的 SQLi-like 字符串都被阻断,并出现 CRS 942100 证据。

    XSS-like 决策

    4 / 4 返回 403

    查询和 JSON 中的脚本标签字符串都被阻断,并出现 CRS 941100 证据。

    能否据此判断赢家

    无法确定

    20 个请求结果一致,不能证明覆盖能力、误报率、吞吐或运营适配相同。

    shared rules: OWASP CRS 4.25.0
    shared upstream: go-httpbin 2.21.0
    ModSecurity: 10/10 expected statuses
    Coraza: 10/10 expected statuses
    clean: 12 HTTP 200 decisions across both stacks
    controlled SQLi/XSS: 8 HTTP 403 decisions across both stacks

    证据上下文

    矩阵控制了规则集、上游、请求与证据格式。

    两条路径都使用 OWASP CRS 4.25.0;实验没有隐藏剩余架构差异:ModSecurity 运行在 NGINX 上,而 Coraza 运行在 Caddy 上。

    固定版本 WAF 测试拓扑,包含一个客户端、两套 WAF、一个共享上游与 CSV、JSON、日志证据。

    开放证据

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

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

    限制

    这个结果不能证明什么

    相关研究

    继续研究 ModSecurity + NGINX vs Coraza + Caddy