Common headers (all domains)
API (api.woku.app)
The API also serves the Swagger documentation at /documentation,
which uses its own inline scripts. On the API, all of the headers
above are applied and CSP is not enforced because the API is not
an HTML surface for users. CSP protection is enforced on the
frontends where code that the browser executes runs (review,
admin).
CORS is restricted to an allowlist (ALLOWED_ORIGINS env
var). In development, localhost:5173 (Vite admin) and
localhost:3000 (Next.js review) are added automatically.
Public frontend (review.woku.app)
In addition to the common headers, this domain applies a nonce-based
CSP generated per request:
script-srcwith nonce +strict-dynamic: only the Next.js bundle (which carries the nonce) and the scripts that this bundle loads dynamically are executed. Any<script>injected by an attacker (XSS) is blocked by the browser.frame-ancestors 'none'+object-src 'none': nobody can embed woku in an<iframe>or load plugins. Defense against clickjacking.connect-srclimited: the frontend can only make XHR/fetch toapi.woku.app(HTTPS and WSS). Any exfiltration to other domains is blocked by the browser.upgrade-insecure-requests: if anhttp://resource is left in by mistake, the browser rewrites it tohttps://.
crypto.getRandomValues(16 bytes) encoded
in base64. It is unique per request and the browser rejects scripts
that do not carry it.
Validation
We periodically test the three domains against:- securityheaders.com → target sustained A+.
- Mozilla Observatory → target sustained A+.
- Hardenize → full battery (TLS, CSP, HTTPS, HSTS, redirects, certs).
Reporting a downgrade
If you find a woku domain with headers more permissive than those documented here:team@woku.app.