Skip to content
πŸ”’ Transparent security policy

Content Security Policy

These are the exact CSP directives applied to every Aegis Firma surface. This page is proof that customer data cannot leave our infrastructure to unknown third parties.

Last updated: August 2026 (unsafe-eval added for Cloudflare Turnstile support). Verify yourself: curl -I https://aegisfirma.com | grep -i content-security

Web App β€” aegisfirma.com

Applied to every route via Next.js headers config. Includes all dashboard pages, API routes, and public marketing pages.

DirectiveValueWhat this means
default-src'self'Baseline: only our own origin
script-src'self' 'unsafe-inline' 'unsafe-eval' https://challenges.cloudflare.com https://static.cloudflareinsights.comunsafe-inline required by Next.js SSR hydration; unsafe-eval required by Cloudflare Turnstile's own hosted script (Cloudflare's documented, unavoidable requirement β€” Turnstile's api.js calls eval()/new Function() internally and cannot function without it); static.cloudflareinsights.com is Cloudflare Web Analytics, a cookie-less page-view counter injected at the edge that records no personal data and sets no identifier
style-src'self' 'unsafe-inline'Tailwind CSS + Next.js inline styles
img-src'self' data: blob: https://*.supabase.coUser-uploaded evidence previews stored in Supabase
font-src'self'Self-hosted only β€” no Google Fonts
frame-srchttps://challenges.cloudflare.comCloudflare Turnstile renders its challenge in an iframe β€” the only iframe source permitted anywhere in the app
connect-src'self' https://*.supabase.co wss://*.supabase.co https://api.lemonsqueezy.com https://challenges.cloudflare.com https://cloudflareinsights.comSupabase (data + realtime), LemonSqueezy billing, Cloudflare Turnstile, and Cloudflare Web Analytics (cookie-less aggregate page views). No ad networks, no cross-site trackers, no third-party data destinations for customer data.
object-src'none'No plugins (Flash, PDF plugins, etc.)
base-uri'self'Prevents base tag injection
form-action'self'Forms only post to our own origin
frame-ancestors'none'Cannot be embedded in any iframe β€” prevents clickjacking
upgrade-insecure-requests(present, no value)HTTP requests auto-upgraded to HTTPS
Why unsafe-inline in script-src? Next.js SSR injects inline script tags for hydration. This is a known framework limitation. We compensate with frame-ancestors: none and strict connect-src allowlist. No data URIs in script-src, no CDN wildcards, no analytics or ad-network scripts.

Why unsafe-eval in script-src? Cloudflare Turnstile β€” the bot-protection widget on signup and free-tool pages β€” cannot function without it; this is Cloudflare's own documented requirement, not a choice we made. It is scoped as narrowly as CSP allows: the alternative was Turnstile simply not working, which would have left signup and abuse-prevention broken instead.

Browser Extension β€” Chrome / Edge / Brave

MV3 extension. Extension pages enforce this CSP via manifest.json content_security_policy. The extension never connects to any third-party domain β€” only syncs to our own API when you explicitly click β€œSync.”

DirectiveValueWhat this means
script-src'self'Extension pages only load scripts bundled with the extension
object-src'none'No plugins
connect-src'self' https://aegisfirma.comExtension only connects to our own API for sync β€” no third-party data destinations
The β€œnever sold” promise is technically enforced. The extension's connect-src only allows https://aegisfirma.com. Data exfiltration to any other destination is impossible at the browser security level β€” not just a policy promise.

Additional Security Headers

Applied alongside CSP on every response.

HeaderValuePurpose
Strict-Transport-Securitymax-age=63072000; includeSubDomains; preload2-year HSTS, preload-eligible
X-Frame-OptionsDENYBelt-and-suspenders alongside frame-ancestors CSP
X-Content-Type-OptionsnosniffPrevent MIME sniffing attacks
Referrer-Policystrict-origin-when-cross-originFull URL only sent to same origin
Permissions-Policycamera=(), microphone=(), geolocation=(), payment=(self)Hardware access denied; payment APIs only on our origin
Cross-Origin-Opener-Policysame-originPrevents cross-origin window sharing
Cross-Origin-Resource-Policysame-originResources not loadable by cross-origin pages

What our CSP explicitly excludes

βœ“
No analytics scripts
No Google Analytics, Mixpanel, Segment, Hotjar, or any other analytics vendor in script-src or connect-src.
βœ“
No ad network scripts
No Facebook Pixel, Google Ads, or any advertising SDK loaded on any page.
βœ“
No CDN wildcards
connect-src uses an explicit allowlist. *.somecdn.com is not permitted.
βœ“
unsafe-eval scoped to one vendor
Present only because Cloudflare Turnstile's own script requires it β€” not used anywhere in our own code, and connect-src still blocks it from reaching anywhere but Cloudflare, Supabase, and LemonSqueezy.
βœ“
No cross-origin embeds
frame-ancestors: none prevents our app from being embedded in any iframe on any domain.
βœ“
No plugin objects
object-src: none blocks Flash, Java applets, and all legacy plugin content.

Related security pages