Browser security
OWASP secure headers
OWASP Secure Headers Project validator runs daily against production.
Attention
11/17 passed · 1 actionable · 5 excluded
Checked 7/30/2026, 3:08:00 AM · Source: Continuous integration
OWASP Secure Headers Project Venom validator. Tests against the OSHP recommendations (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Resource-Policy, etc). 5 test(s) deliberately excluded with documented rationale (Content-Security-Policy, Referrer-Policy, Clear-Site-Data, Cross-Origin-Embedder-Policy, Cache-Control) — see findings list (severity=info) or .venomignore.json for the full justification per test.
What this check means
We use the OWASP Secure Headers Project (OSHP) reference validator — Venom-based — to test our HTTP response headers against OSHP recommendations. Tests cover Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Resource-Policy and others. The official OWASP YAML test suite is fetched fresh each run.
Documented exclusions (5)
5 finding types are deliberately not actioned here. Grouped by reason below — we publish them so the trade-offs and false-positive suppressions are visible and reviewable, not hidden.
Trade-offs · 5
Recommended setting would break legitimate functionality. We accept the finding instead.
Content-Security-Policy
OWASP requires CSP without `unsafe-inline` or any `eval` family directive. Two intentional deviations: (1) `unsafe-inline` — Next.js's React hydration requires inline `<script>` tags; eliminating it needs a per-request nonce-based CSP threaded through every render path (substantial refactor that also has to coexist with our 6 third-party scripts: Cloudflare Insights, Sentry, Auth0, Google Ads, Microsoft Clarity, Google Analytics). (2) `wasm-unsafe-eval` — required in production for client-side PDF export (@react-pdf/renderer compiles a WASM font/layout module via WebAssembly.instantiate). This is the narrow modern directive that permits WASM compile/instantiate ONLY — it does NOT permit JS eval(), new Function(), or string-form setTimeout. Removing it breaks PDF export with a CompileError. The broad `unsafe-eval` remains absent from the production CSP.
Referrer-Policy
OWASP requires `no-referrer`. We use `strict-origin-when-cross-origin` because Sentry session-replay, Auth0 universal-login callback, and Google Analytics all rely on the Referer header for attribution and correlation. Stripping referrer breaks observability and conversion tracking with no security gain on a same-site product.
Clear-Site-Data
OWASP recommends Clear-Site-Data on every response. Applied globally, this wipes cookies/storage on every page load — every navigation logs the user out. We only emit this header on the explicit logout endpoint (workers/api/src/routes/auth/logout/route.ts), where it's the correct behaviour.
Cross-Origin-Embedder-Policy
OWASP requires `require-corp`. Setting this breaks the Auth0 universal-login flow (uses cross-origin iframes for the login UI), Google Ads creative iframes, and Cloudflare Turnstile. The hardening it provides (cross-origin isolation for SharedArrayBuffer / high-resolution timers) is irrelevant to our app — we don't use either.
Cache-Control
OWASP wants `Cache-Control: no-store, max-age=0` on every response. Applied globally that disables Cloudflare's edge cache for our public content (insights, frameworks, comparisons, etc.) and forces every page render through OpenNext on the worker — slower for users, more expensive at scale. We apply `no-store` selectively on authenticated paths (/admin, /dashboard, /command-center, etc.) where it's correct, and let public content cache. The OWASP test reflects a security-paranoid posture more appropriate for fully-authenticated apps than for content sites with a public surface.
Recent runs
| When | Result | Source | |
|---|---|---|---|
| 7/30/2026, 3:08:00 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/29/2026, 3:07:02 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/28/2026, 3:08:16 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/27/2026, 3:10:34 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/26/2026, 3:08:46 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/25/2026, 3:07:22 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/24/2026, 3:08:18 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/23/2026, 3:08:28 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/22/2026, 3:08:39 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/21/2026, 3:08:31 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/20/2026, 3:09:38 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/19/2026, 3:08:59 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/18/2026, 3:07:00 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/17/2026, 3:08:02 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/17/2026, 12:03:17 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/16/2026, 3:07:55 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/15/2026, 3:07:57 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/14/2026, 3:07:29 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/13/2026, 3:10:05 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/12/2026, 3:09:03 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/11/2026, 3:08:12 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/10/2026, 3:10:45 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/9/2026, 3:11:18 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/8/2026, 3:08:58 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/7/2026, 3:11:19 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/6/2026, 3:13:28 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/5/2026, 3:12:07 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/4/2026, 12:15:45 PM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 7/1/2026, 12:03:29 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration | |
| 6/30/2026, 3:18:49 AM | 11/17 passed · 1 actionable · 5 excluded | Continuous integration |
Need additional detail (sanitised report, supporting evidence)? security@theartofcto.com