docs(backend): corrige la justification du CORP same-origin (no-cors, pas d'ingress)
Airflow / Construction de l'image (push) Successful in 1m17s
Backend / Tests exigeant une base (push) Failing after 4m50s
Backend / Analyse statique de sécurité (push) Successful in 7s
Airflow / Lint et intégrité des DAGs (push) Successful in 9m34s
Backend / Audit des dépendances (push) Successful in 9m36s
Backend / Lint, typage et tests (push) Successful in 10m7s
SonarQube / test-ml (push) Failing after 6m8s
SonarQube / build-front (push) Successful in 10m15s
SonarQube / build-back (push) Successful in 10m47s
SonarQube / test-front (push) Failing after 5m13s
SonarQube / test-back (push) Failing after 5m22s
SonarQube / SonarQube (push) Skipped

This commit is contained in:
Dorian
2026-09-23 10:30:06 +02:00
parent cfc194a3fb
commit ac05da7001
2 changed files with 7 additions and 5 deletions
+2 -2
View File
@@ -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",
}
+5 -3
View File
@@ -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`.