宿主运行环境
macOS aarch64 上的 Docker Desktop 29.2.0,分配 10 CPU 与 7.65 GiB 内存
WAFWiki 原创实验
原创 ModSecurity vs Coraza Docker 对比:使用同一 OWASP CRS 4.25.0、同一上游和 20 个正常、SQLi、XSS、Query 与 JSON 决策。

证据原则
WAFWiki 会区分已验证的动手实测、冒烟实测、架构图和方法论说明。任何本地实验都只证明记录环境中的有限路径,不代表完整生产就绪。
环境
macOS aarch64 上的 Docker Desktop 29.2.0,分配 10 CPU 与 7.65 GiB 内存
两条路径均使用 OWASP CRS 4.25.0、阻断偏执等级 1、入站异常阈值 5
ModSecurity 3.0.16、ModSecurity-nginx 1.0.4,NGINX 镜像按标签与摘要固定
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.jsonJSON 应记录宿主信息、组件版本、镜像 ID、请求结果、采样、资源快照和限制。
观察结果
完整矩阵
两个栈对每个预先声明用例都给出了预期 HTTP 状态。
正常决策
两个引擎分别放行同一组 6 个代表性正常输入。
SQLi-like 决策
查询和 JSON 中的 SQLi-like 字符串都被阻断,并出现 CRS 942100 证据。
XSS-like 决策
查询和 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 上。

开放证据
文件公开状态矩阵和固定版本摘要,不发布原始容器日志或无关本地数据。
下载包含 20 条请求状态与时间的原始矩阵。
下载组件版本、镜像摘要、完整结果、采样和限制。
限制
相关研究