Skip to main content

Documentation Index

Fetch the complete documentation index at: https://woku.app/docs/llms.txt

Use this file to discover all available pages before exploring further.

Toda respuesta HTTP de Woku incluye un set de headers de seguridad calibrados para obtener calificación A+ en securityheaders.com.

Headers comunes (todos los dominios)

HeaderValorPor qué
Strict-Transport-Securitymax-age=63072000; includeSubDomains; preloadFuerza HTTPS por 2 años en navegador. Apto para HSTS preload list.
X-Content-Type-OptionsnosniffBloquea MIME-sniffing.
X-Frame-OptionsDENYBloquea cualquier framing del contenido. Defensa-en-profundidad sobre frame-ancestors.
Referrer-Policystrict-origin-when-cross-originNo leakea path/query a sitios externos.
Permissions-Policycamera=(self), microphone=(self), geolocation=(), interest-cohort=()Habilita cámara/micrófono solo para Woku; bloquea geolocation y FLoC.
Cross-Origin-Opener-Policysame-originAísla el contexto del navegador para mitigar Spectre.

API (api.woku.app)

La API sirve también la documentación Swagger en /documentation, que usa scripts inline propios. En el API se aplican todos los headers de arriba y CSP no se enforza porque la API no es una superficie HTML para usuarios. La protección CSP se enforza en los frontends donde corre código que ejecuta el navegador (review, admin). CORS está restringido a una allowlist (ALLOWED_ORIGINS env var). En desarrollo se añaden localhost:5173 (Vite admin) y localhost:3000 (Next.js review) automáticamente.

Frontend público (review.woku.app)

Además de los headers comunes, este dominio aplica una CSP nonce-based generada per-request:
default-src 'self';
script-src 'self' 'nonce-<random>' 'strict-dynamic';
style-src 'self' 'unsafe-inline';
img-src 'self' blob: data: https://wokuapifiles.s3.us-east-1.amazonaws.com;
font-src 'self' data:;
connect-src 'self' https://api.woku.app wss://api.woku.app;
media-src 'self' blob: https://wokuapifiles.s3.us-east-1.amazonaws.com;
frame-ancestors 'none';
base-uri 'self';
form-action 'self';
object-src 'none';
upgrade-insecure-requests
Lo importante:
  • script-src con nonce + strict-dynamic: solo se ejecuta el bundle de Next.js (que lleva el nonce) y los scripts que ese bundle cargue dinámicamente. Cualquier <script> inyectado por un atacante (XSS) es bloqueado por el navegador.
  • frame-ancestors 'none' + object-src 'none': nadie puede embeber Woku en un <iframe> ni cargar plugins. Defensa contra clickjacking.
  • connect-src limitado: el front solo puede hacer XHR/fetch a api.woku.app (HTTPS y WSS). Cualquier exfiltración a otros dominios es bloqueada por el navegador.
  • upgrade-insecure-requests: si por error queda un recurso http://, el navegador lo reescribe a https://.
El nonce se genera con crypto.getRandomValues(16 bytes) codificado en base64. Es único por request y el navegador rechaza scripts que no lo lleven.

Validación

Periodicamente probamos los tres dominios contra:

Reportar un downgrade

Si descubres un dominio Woku con headers más permisivos que los documentados aquí: team@woku.app.