宿主运行环境
macOS aarch64 上的 Docker Desktop 29.2.0,分配 10 CPU 与 7.65 GiB 内存
WAFWiki 原创实验
固定版本 Coraza + Caddy Docker 实测,覆盖 OWASP CRS 4.25.0、10 个正常与攻击特征请求、HTTP 结果、日志、镜像摘要和构建约束。

证据原则
WAFWiki 会区分已验证的动手实测、冒烟实测、架构图和方法论说明。任何本地实验都只证明记录环境中的有限路径,不代表完整生产就绪。
环境
macOS aarch64 上的 Docker Desktop 29.2.0,分配 10 CPU 与 7.65 GiB 内存
使用 xcaddy 构建 Caddy 2.11.2,并加入 coraza-caddy 2.5.0
Coraza 3.7.0,内嵌 coraza-coreruleset 4.25.0
sha256:decfd7324ee3f377d80e3e41b7f7db4be500c615a6ee2f80e8de8a565e909d23
同一隔离 Docker 网络中的 mccutchen/go-httpbin:2.21.0
上游 127.0.0.1:18180,Coraza 127.0.0.1:18182
命令
docker build --provenance=false \
-t wafwiki/coraza-caddy:2.5.0 \
docs/lab-fixtures/coraza-caddy构建信息应显示 Caddy 2.11.2、coraza-caddy 2.5.0、Coraza 3.7.0 与 coraza-coreruleset 4.25.0。
scripts/run-waf-evidence-lab.sh脚本只创建 wafwiki-evidence-* 资源,完成请求矩阵、写入证据,并清理自己启动的容器。
awk -F, 'NR == 1 || $1 == "coraza" { print }' \
docs/lab-evidence/waf-engine-comparison-2026-07-26-requests.csv输出 10 条 Coraza 记录,其中 6 条状态为 200,4 条状态为 403。
观察结果
预期结果
在这组小型请求集中,每一个 Coraza 状态都与预先声明的预期一致。
正常请求
普通查询、JSON、邮箱、版本路径、过滤条件和 C++ 搜索词均到达上游。
受控攻击特征请求
查询参数与 JSON 字段中的 SQLi-like、XSS-like 字符串均被阻断。
构建兼容性
早期使用 Caddy 2.10.2 构建失败,因为 coraza-caddy 2.5.0 要求 Caddy 2.11.2。
资源快照
完成请求和延迟采样后 Docker 报告 57.2 MiB;该值不是容量建议。
Coraza 3.7.0 / coraza-caddy 2.5.0 / Caddy 2.11.2
OWASP CRS 4.25.0, rule engine on, blocking paranoia level 1
clean decisions: 6 x HTTP 200
SQLi/XSS decisions: 4 x HTTP 403
observed rules: 942100, 941100, 941110, 941160, 949110
image digest: sha256:decfd7324ee3f377d80e3e41b7f7db4be500c615a6ee2f80e8de8a565e909d23证据上下文
两个 WAF 路径使用同一上游、同一请求定义、OWASP CRS 4.25.0、localhost 路由与证据格式;反向代理和引擎仍按设计保持不同。

开放证据
文件公开状态矩阵和固定版本摘要,不发布原始容器日志或无关本地数据。
包含引擎、用例、方法、路径、预期状态、实际状态和 curl 时间的 20 条请求结果。
包含固定镜像 ID、组件版本、宿主信息、请求结果、延迟样本、资源快照与限制。
限制
相关研究