FINDINGS · 2026-06-01 → 2026-06-06
MEDIUMRESOLVEDMissing Content-Security-Policy
What it means: No CSP header — broader XSS injection surface than required.
What we did: CSP shipped via <meta http-equiv> in app/layout.tsx (2026-06-06). default-src 'self' + script/style 'unsafe-inline' for Next.js inline blocks + /cdn-cgi/scripts/ for Cloudflare.
MEDIUMRESOLVEDMissing X-Frame-Options
What it means: No X-Frame-Options — clickjacking via iframe embed possible.
What we did: X-Frame-Options: SAMEORIGIN now served by Cloudflare Managed Transform 'Add security headers' (enabled 2026-06-06).
LOWOPENMissing X-XSS-Protection
What it means: Legacy XSS filter disabled.
What we did: Header is deprecated in modern browsers (Chrome/Edge ignore it). CSP covers the same threat model in 2026 browsers. Not planning to add.
LOWRESOLVEDMissing Referrer-Policy
What it means: Outbound clicks leak full URL info to third parties.
What we did: Referrer-Policy: same-origin (stricter than recommendation) served by Cloudflare Managed Transform. Belt-and-braces <meta name='referrer'> in app/layout.tsx.
LOWPARTIALMissing Permissions-Policy
What it means: Browser feature APIs (camera, mic, geolocation, payment) unrestricted.
What we did: Site uses none of those APIs. Cloudflare Transform Rule to deny them queued — dashboard step pending (see audit/STAGED_CLOUDFLARE_RULES.md). No functional risk in interim.
LOWOPENInformation disclosure — Server header
What it means: Server: cloudflare reveals fronting CDN.
What we did: Trade-off: keeping Server: cloudflare lets clients debug DNS/CDN issues. The disclosure is harmless because Cloudflare's role here is verifiable from any whois / DNS lookup anyway.
TLS 1.3 · cert valid through 2 July 2026 · 0 open ports (Cloudflare-fronted) · 0 cleartext services · 0 DB exposure.