From ac05da700163d29158d683cbfd204668e02d494b Mon Sep 17 00:00:00 2001 From: Dorian Date: Wed, 23 Sep 2026 10:30:06 +0200 Subject: [PATCH] docs(backend): corrige la justification du CORP same-origin (no-cors, pas d'ingress) --- apps/backend/app/api/middleware.py | 4 ++-- docs/architecture/20-backend.md | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/backend/app/api/middleware.py b/apps/backend/app/api/middleware.py index 5ef8e9e..1908e76 100644 --- a/apps/backend/app/api/middleware.py +++ b/apps/backend/app/api/middleware.py @@ -16,8 +16,8 @@ EN_TETES: Final[dict[str, str]] = { "X-Content-Type-Options": "nosniff", "X-Frame-Options": "DENY", "Referrer-Policy": "no-referrer", - # same-origin : le frontend ne consomme l'API qu'au travers d'un proxy same-origin - # (proxy.conf.json en dev, ingress /api en prod, cf. docs/architecture/20-backend.md). + # same-origin : aucun client ne charge l'API en no-cors depuis une autre origine + # (proxy.conf.json en dev, reverse proxy nginx ensuite, cf. docs/architecture/20-backend.md). "Cross-Origin-Resource-Policy": "same-origin", } diff --git a/docs/architecture/20-backend.md b/docs/architecture/20-backend.md index 4bc0647..cc4411b 100644 --- a/docs/architecture/20-backend.md +++ b/docs/architecture/20-backend.md @@ -424,9 +424,11 @@ Le reste, par ordre de surface : de secret au logger, la deuxième de ne jamais mettre un jeton dans une URL. - En-têtes posés par l'application : `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, `Cross-Origin-Resource-Policy: same-origin`, plus `Cache-Control: no-store` - sur `/auth/*`. Le CORP est fixé à `same-origin` parce que le frontend ne consomme l'API qu'au - travers d'un proxy same-origin (`proxy.conf.json` en dev, ingress `/api` en prod), jamais - directement cross-origin depuis le navigateur. HSTS et CSP appartiennent au terminateur TLS, que + sur `/auth/*`. Le CORP est fixé à `same-origin` parce qu'aucun client légitime ne charge l'API + en `no-cors` (image, script, média) depuis une autre origine : le frontend l'appelle en relatif + (`/api/v1`), sur sa propre origine, via `proxy.conf.json` en dev et le reverse proxy nginx + (`infra/proxy/conf.d/enervision.conf`) en recette et en production. Les appels `HttpClient`, en + mode `cors`, n'y sont de toute façon pas soumis. HSTS et CSP appartiennent au terminateur TLS, que l'application ne connaît pas : le reverse proxy les pose ([ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md)). - Le conteneur tourne en utilisateur non-root, avec un `HEALTHCHECK` sur `/api/v1/health/live`.