# Security response headers for the Cloudflare Pages deployment of the # dashboard. The nginx image carries the same set in # nginx-security-headers.conf; both exist because the hosted service serves the # frontends from Pages while a self-host serves them from the image. # # build:pages fills the built policy's hashes and configured resource origins. /* ! Access-Control-Allow-Origin X-Content-Type-Options: nosniff X-Frame-Options: DENY Referrer-Policy: strict-origin-when-cross-origin Permissions-Policy: camera=(), microphone=(), geolocation=(), interest-cohort=() Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; object-src 'none'; base-uri 'none'; form-action 'self'; frame-ancestors 'none' Strict-Transport-Security: max-age=31536000; includeSubDomains # Pages applies path headers to missing assets too; revalidate instead of caching a 404 immutably. /assets/* Cache-Control: public, max-age=0, must-revalidate /mail-preview.html ! Content-Security-Policy Content-Security-Policy: default-src 'none'; script-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'self'; style-src 'unsafe-inline'; img-src data: https: http:; font-src data: https:; media-src https: ! X-Frame-Options X-Frame-Options: SAMEORIGIN ! Referrer-Policy Referrer-Policy: no-referrer Cache-Control: no-store # Pages canonicalizes the .html asset to this extensionless URL. /mail-preview ! Content-Security-Policy Content-Security-Policy: default-src 'none'; script-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'self'; style-src 'unsafe-inline'; img-src data: https: http:; font-src data: https:; media-src https: ! X-Frame-Options X-Frame-Options: SAMEORIGIN ! Referrer-Policy Referrer-Policy: no-referrer Cache-Control: no-store # config.js is the runtime configuration and must never outlive a change to it; same rule as the nginx image. /config.js Cache-Control: no-store