OWASP CRS 正常流量回归,展示两套 WAF 放行 6 类正常输入,并记录数字 Host 触发的 CRS 920350 告警。
12 个正常决策全部返回 200,但 localhost 数字 Host 仍在两套日志中稳定触发 CRS 920350。

    实验状态

    对象
    OWASP CRS 4.25.0 正常流量回归
    状态
    已完成动手实测
    更新
    2026-07-26

    证据原则

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

    环境

    可复现信息

    规则集

    OWASP CRS 4.25.0、偏执等级 1、入站异常阈值 5

    正常输入模式

    普通查询、订单式 JSON、邮箱、版本化文档路径、状态过滤器与 C++ 搜索词

    决策数量

    每套栈 6 个请求,共 12 个正常 HTTP 决策

    Host 请求头

    curl 默认的数字 localhost Host,端口分别为 18181 与 18182

    观察到的告警

    CRS 920350:Host header is a numeric IP address

    阻断结果

    在该矩阵中,没有正常请求达到入站异常阻断阈值

    命令

    如何复现实验

    运行正常与受控请求矩阵

    scripts/run-waf-evidence-lab.sh

    最终 CSV 包含 12 条正常记录和 8 条受控 SQLi/XSS 记录。

    查看正常决策

    awk -F, 'NR == 1 || $2 ~ /^clean/ { print }' \
      docs/lab-evidence/waf-engine-comparison-2026-07-26-requests.csv

    正常子集中的每个引擎和用例都显示 HTTP 200。

    检查数字 Host 告警

    rg '920350|Host header is a numeric IP address' \
      docs/lab-evidence/waf-engine-comparison-2026-07-26-*.log

    两份日志都包含由 localhost 数字 Host 触发的协议检查告警。

    观察结果

    本轮动手实测说明了什么

    正常 HTTP 决策

    12 / 12 返回 200

    所选正常请求均未被任一 WAF 阻断。

    阻断偏差

    观察到 0 个

    所有正常用例都符合预期,但样本太小,不能形成通用误报率。

    告警噪声

    规则 920350 重复出现

    数字 localhost Host 被记录为协议告警,即使请求最终放行。

    运营启示

    不仅要审查阻断,也要审查告警

    正常流量回归应同时评估日志噪声、告警分流和 HTTP 中断。

    clean-query: 200 on ModSecurity and Coraza
    clean-json: 200 on ModSecurity and Coraza
    clean-email: 200 on ModSecurity and Coraza
    clean-version-path: 200 on ModSecurity and Coraza
    clean-filter: 200 on ModSecurity and Coraza
    clean-code-term: 200 on ModSecurity and Coraza
    log nuance: CRS 920350 warned on the numeric Host header

    证据上下文

    正常流量回归同时比较决策结果和日志副作用。

    HTTP 200 并不代表完全没有运营影响;数字 Host 告警说明验证正常流程时还需记录告警、异常分数贡献与噪声。

    同一组正常请求经过两套 OWASP CRS WAF 栈的 Docker 回归拓扑。

    开放证据

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

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

    限制

    这个结果不能证明什么

    相关研究

    继续研究 OWASP CRS 4.25.0 正常流量回归