Rule set
OWASP CRS 4.25.0, paranoia level 1, inbound anomaly threshold 5
Original WAFWiki lab
Clean-traffic regression test for ModSecurity and Coraza with 12 HTTP 200 decisions, six input patterns, zero blocking mismatches, and one repeatable numeric Host warning.

Evidence policy
WAFWiki separates verified smoke-test results from architecture diagrams and methodology notes. A smoke test proves one narrow local path; it does not claim full production readiness.
Environment
OWASP CRS 4.25.0, paranoia level 1, inbound anomaly threshold 5
Simple query, order-style JSON, email, versioned documentation path, status filter, and C++ search term
Six requests per stack, 12 clean HTTP decisions total
curl default numeric localhost host with ports 18181 and 18182
CRS rule 920350: Host header is a numeric IP address
No clean request reached the inbound anomaly threshold in this matrix
Commands
scripts/run-waf-evidence-lab.shThe final CSV contains 12 clean rows and eight controlled SQLi/XSS rows.
awk -F, 'NR == 1 || $2 ~ /^clean/ { print }' \
docs/lab-evidence/waf-engine-comparison-2026-07-26-requests.csvThe clean subset shows HTTP 200 for every recorded engine and case.
rg '920350|Host header is a numeric IP address' \
docs/lab-evidence/waf-engine-comparison-2026-07-26-*.logBoth logs contain protocol-enforcement warnings caused by the localhost numeric Host header.
Observed result
Clean HTTP decisions
No selected clean request was blocked by either stack.
Blocking mismatches
Every clean case matched the expected status, but the sample is too small for a general false-positive rate.
Warning noise
Numeric localhost Host headers were logged as protocol warnings even though requests remained allowed.
Operational lesson
A clean regression should evaluate log noise and alert routing as well as HTTP interruption.
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 headerEvidence context
HTTP 200 alone is not enough. The numeric Host warning demonstrates why teams should capture alerts, anomaly contributions, and operational noise while validating normal workflows.

Open evidence
The files expose the status matrix and versioned summary without publishing raw container logs or unrelated local data.
Twenty request outcomes with engine, case, method, path, expected status, observed status, and curl time.
Pinned image IDs, component versions, host details, request results, latency samples, resource snapshots, and limitations.
Limitations
Related research