Expression de Besoin — PD-19¶
Configurer CORS et Security Headers¶
1. Objet¶
Définir les exigences fonctionnelles et non fonctionnelles relatives à la maîtrise de l'exposition HTTP du backend ProbatioVault, afin de limiter les usages non prévus, les abus triviaux et les interprétations dangereuses par des agents clients (navigateurs, scripts, intermédiaires), indépendamment de la logique métier et cryptographique.
2. Contexte¶
2.1 Contexte fonctionnel¶
ProbatioVault est une application de coffre-fort numérique probatoire manipulant des données sensibles (documents probatoires, preuves cryptographiques, informations personnelles).
Le backend expose une API critique servant à : - L'authentification - L'orchestration de flux cryptographiques - L'accès à des ressources probatoires à forte valeur juridique - L'interfaçage avec des composants sensibles (HSM, horodatage, ancrage)
Cette API est accessible via Internet et est donc structurellement exposée à des acteurs non maîtrisés, y compris en dehors de tout scénario d'attaque sophistiquée.
2.2 Contexte technique (état actuel)¶
Le backend NestJS 10 avec Express est actuellement configuré avec : - Helmet.js v7.1.0 en configuration par défaut - CORS basique (origine unique via variable d'environnement CORS_ORIGIN) - Aucun mécanisme de rate limiting
L'API sera consommée par : - Une application mobile iOS/Android - Une Progressive Web App (PWA) - Potentiellement des intégrations tierces (B2B)
2.3 Périmètre¶
Inclus : - Toutes les interfaces HTTP exposées par le backend - Tous les environnements accessibles hors réseau interne strict - Tous les types de clients (navigateurs, scripts, applications)
Explicitement exclu : - La protection contre des attaques distribuées de grande ampleur (DDoS réseau) - La sécurité cryptographique des données - La gestion des clés, des identités ou des preuves - La détection d'attaques complexes ou ciblées - L'authentification et l'autorisation (JWT, sessions, permissions)
Ces exclusions sont conscientes et ne constituent pas un oubli.
3. Objectifs¶
3.1 Objectif principal¶
Réduire la surface d'exploitation involontaire du backend en encadrant strictement : - Les contextes dans lesquels l'API peut être appelée - La manière dont les réponses peuvent être interprétées par un client - La fréquence et l'intensité des appels acceptables
3.2 Objectifs secondaires¶
- Prévenir les abus non sophistiqués (scripts, erreurs client, intégrations sauvages)
- Éviter qu'un navigateur ou un agent tiers n'exploite des comportements par défaut non intentionnels
- Poser un socle de sécurité homogène applicable à l'ensemble du backend
- Garantir la transparence et l'auditabilité de la configuration de sécurité
4. Exigences fonctionnelles¶
EF-1 — Encadrement des contextes d'appel¶
Le backend doit restreindre les contextes dans lesquels ses interfaces peuvent être appelées depuis des agents clients susceptibles d'exécuter du code ou d'interpréter dynamiquement les réponses.
EF-2 — Neutralité d'interprétation des réponses¶
Le backend doit empêcher que ses réponses puissent être interprétées, exécutées ou détournées d'une manière non explicitement prévue par l'intention fonctionnelle initiale.
EF-3 — Limitation des usages excessifs¶
Le backend doit refuser ou contenir les usages caractérisés par une fréquence ou une intensité anormale, même lorsque les requêtes sont formellement valides.
5. Exigences non fonctionnelles¶
ENF-1 — Indépendance vis-à-vis du métier¶
Les mécanismes répondant à ce besoin ne doivent pas dépendre de la logique métier, du type d'utilisateur ou du contenu manipulé.
ENF-2 — Application transversale¶
Les exigences doivent s'appliquer de manière cohérente et systématique à l'ensemble des points d'exposition HTTP.
ENF-3 — Comportement prévisible¶
Le backend doit adopter un comportement déterministe et documentable face aux usages non conformes (refus, limitation, neutralisation).
ENF-4 — Différenciation par environnement¶
La configuration doit être adaptable par environnement (dev, test, prod) sans modification du code.
6. Contraintes¶
6.1 Juridiques et réglementaires¶
- RGPD : Les headers ne doivent pas exposer d'informations sur l'infrastructure (Server, X-Powered-By)
- eIDAS : L'intégrité des réponses API doit être garantie contre le tampering côté client
6.2 Temporelles¶
- La story fait partie du sprint de consolidation BACKEND-CORE
- Doit être compatible avec les développements en cours sur l'authentification (PD-32)
6.3 Organisationnelles¶
- Les développeurs front-end doivent pouvoir travailler en local sans être bloqués par les restrictions
- La configuration doit être documentée et auditable
7. Résultats inacceptables¶
Sont considérés comme inacceptables :
| Scénario | Pourquoi inacceptable |
|---|---|
| Une API exploitable depuis des contextes non prévus sans aucune restriction | Violation de la politique same-origin, vol de données |
| Des réponses pouvant être interprétées ou exécutées par défaut par un navigateur | Vecteur XSS, injection de contenu |
| L'absence totale de frein face à un usage excessif ou automatisé | Bruteforce, scraping, épuisement de ressources |
| Une exposition HTTP reposant uniquement sur la bonne foi des clients | Sécurité illusoire |
| Les headers révèlent "NestJS" ou "Express" | Information disclosure facilitant le ciblage d'exploits |
| L'application mobile légitime est bloquée par les restrictions | Indisponibilité pour les utilisateurs finaux |
| Les développeurs ne peuvent plus tester en local | Blocage du développement, perte de productivité |
8. Tensions et conflits non résolus¶
Ouverture vs restriction¶
L'API doit rester intégrable par des clients légitimes tout en empêchant les usages non autorisés.
Tolérance vs protection¶
Un usage excessif peut résulter d'une erreur légitime (retry sur mauvaise connexion) ou d'un abus intentionnel.
Sécurité vs simplicité¶
Un durcissement excessif peut nuire à l'expérience développeur ou aux tests.
Partenaires B2B¶
Les intégrations B2B nécessitent des origines spécifiques. Comment gérer dynamiquement les partenaires sans redéploiement ?
Ces tensions sont acceptées et non arbitrées dans cette Expression de Besoin.
9. Questions ouvertes¶
- Quelles origines doivent être autorisées en production ?
- Domaines des apps (mobile, PWA) ?
-
Sous-domaines autorisés ou liste fixe ?
-
Quels seuils de limitation sont acceptables ?
- Global par IP ?
- Par endpoint (plus strict sur
/auth/login) ? -
Quel window (par seconde, par minute) ?
-
La limitation doit-elle être bypassable pour certains clients ?
- API keys partenaires ?
-
IPs whitelistées ?
-
Comment notifier les équipes en cas de limitation déclenchée ?
- Logs uniquement ?
- Alerting ?
- Métriques (Prometheus) ?
10. Hypothèses implicites assumées¶
- Le backend sera attaqué, testé, sondé, même sans motivation ciblée.
- Les erreurs de configuration sont inévitables à long terme.
- La sécurité repose aussi sur la réduction des comportements possibles, pas uniquement sur la robustesse du code.
11. Positionnement de PD-19¶
PD-19 constitue : - Une couche de sécurité de surface - Un pré-requis d'exploitation saine - Une base nécessaire mais non suffisante pour un backend critique
Elle ne prétend pas garantir la sécurité globale du système.
Document produit par le workflow de gouvernance IA — Étape 0 Date : 2026-02-09