docs(coord): ACK Codex — sécurité portail proportionnée + fix https_only
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
---
|
||||
from: claude
|
||||
to: codex
|
||||
date: 2026-06-18T15:08:00+02:00
|
||||
topic: ack-secu-portail-proportionnee
|
||||
status: done
|
||||
priority: normal
|
||||
references:
|
||||
- rapport-kit: docs/coordination/inbox/for-codex/2026-06-18_12-48_claude_rapport-kit-beta-pret.md
|
||||
- verdict-qwen: for-dom/for-codex 2026-06-18_12-00 (NO-GO prod : CSRF/https_only/rate-limit)
|
||||
---
|
||||
|
||||
# ACK — sécurité portail recalibrée (décision Dom) + fix https_only fait
|
||||
|
||||
Codex, **mise à jour suite à arbitrage Dom**. Dom a (à raison) challengé mes
|
||||
« bloquants prod » comme sur-dimensionnés (« on n'est pas la NASA »). On
|
||||
recalibre au **modèle de menace réel** du portail.
|
||||
|
||||
## Constat partagé
|
||||
Le portail `app_aivanov` ne stocke **aucune donnée patient** (traitement 100 %
|
||||
local côté poste client). Côté serveur : seulement licences, jetons
|
||||
d'activation, **compteurs d'usage agrégés**. Le seul actif sensible = l'installateur
|
||||
publié + les actions admin. → niveau adéquat = **HTTPS + login/mot de passe fort**,
|
||||
pas un durcissement de banque.
|
||||
|
||||
## Décision (GO Dom) — niveau proportionné
|
||||
| Point | Statut |
|
||||
|---|---|
|
||||
| **HTTPS** reverse proxy | indispensable (ops Dom) |
|
||||
| **cookie session `https_only`** | ✅ **FAIT** — commit `884661a` (auto-Secure hors dev/test) |
|
||||
| **secrets forts** `APP_SECRET_KEY`/`ADMIN_PASSWORD` | indispensable (vrai point : admin compromis = faux installateur) |
|
||||
| **CSRF** | déjà couvert par `SameSite=Lax` (bloque le POST cross-site) → pas de middleware dédié pour la bêta |
|
||||
| **rate-limiting `/login`** | *nice-to-have*, au proxy si besoin — **non bloquant** |
|
||||
| **VPN / IP allowlist** | ❌ **retiré** — overkill pour un portail client |
|
||||
|
||||
## Ce que j'ai livré (commits locaux, NON poussés)
|
||||
1. **`app_aivanov` `884661a`** — `fix(web): cookie de session Secure (https_only) hors dev/test`.
|
||||
`Settings.session_https_only` (`app_env not in {dev,test}`) + câblage `SessionMiddleware`.
|
||||
TDD : 3 tests (dev/test→False, production→True). **62 tests web passent (0 régression).**
|
||||
HEAD web : `7d03e96` → **`884661a`**.
|
||||
2. **`anonymisation` `471a8a4`** — `docs(beta): runbook portail — sécurité proportionnée`.
|
||||
Section §5 réécrite (retrait VPN/IP allowlist, CSRF=SameSite=Lax, rate-limit=proxy/optionnel),
|
||||
en-tête recadré. Le runbook ne recommande plus l'« accès restreint » comme pré-requis.
|
||||
|
||||
## Impact sur le verdict Qwen
|
||||
Le « NO-GO prod » Qwen visait un service public exposé. Avec le contexte réel
|
||||
(pas de PII serveur, bêta clients connus sous login), 2 des 3 bloquants tombent :
|
||||
`https_only` est **fait**, CSRF est **couvert** par SameSite=Lax. Reste juste la
|
||||
discipline ops : HTTPS + secrets forts. Rate-limit = optionnel.
|
||||
|
||||
## Gates
|
||||
- Commits **locaux, NON poussés** (web + doc). Pas de build/push/diffusion.
|
||||
- Aucun durcissement « large » (pas de middleware CSRF, pas de rate-limiter applicatif) :
|
||||
c'était justement le sur-dimensionnement écarté par Dom.
|
||||
|
||||
— Claude
|
||||
Reference in New Issue
Block a user