Skip to content

feat(security): CSP stricte + durcissement (E10-5, #166) - #174

Merged
decarvalhoe merged 1 commit into
developfrom
feature/e10-5-csp
Jul 2, 2026
Merged

feat(security): CSP stricte + durcissement (E10-5, #166)#174
decarvalhoe merged 1 commit into
developfrom
feature/e10-5-csp

Conversation

@decarvalhoe

Copy link
Copy Markdown
Owner

Ferme #166 (et clôt l'EPIC 10). CSP stricte sans 'unsafe-inline', active via <meta http-equiv> et vérifiée en CI. Débloquée par #163 (extraction des styles inline).

index.html — plus aucun inline

  • Script de pré-peinture du thème externalisésrc/theme-init.js (script-src 'self').
  • Bloc <style> déplacé dans main.css ; attribut style="" du bouton langue → classe .theme-toggle--lang (style-src 'self').

La politique

default-src 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self';
object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'
  • <meta name="referrer" content="no-referrer">. Seule exception : Google Fonts, scopée à ses 2 domaines et documentée (self-host = dépasser le budget 280 KB).

Vérification en CI

Nouveau check checkCSP : écoute securitypolicyviolation sur la carte + une salle → échoue à la moindre violation (testé négativement : un style="" injecté est bien capté). Les 9 écrans sont rendus CSP active à 0,00 % (sources et dist/). Le harnais normalise le rendu via feuille construite (adoptedStyleSheets, CSP-safe) ; l'injection d'axe utilise un bypass CSP ciblé (outil de test).

Doc

docs/SECURITY.md : CSP, exception fonts, en-têtes serveur/CDN à poser hors <meta> (X-Content-Type-Options, Permissions-Policy…).

655 tests · lint vert · CSP + a11y + 9 écrans conformes.

)

CSP stricte SANS 'unsafe-inline', active via <meta http-equiv> et vérifiée
en CI. Débloquée par l'extraction des styles inline (#163).

- index.html : script de pré-peinture du thème externalisé (src/theme-init.js),
  bloc <style> déplacé dans main.css, attribut style="" du bouton langue → classe
  (.theme-toggle--lang). Plus aucun inline → script-src/style-src 'self'.
- CSP : default-src 'self' ; object-src 'none' ; frame-ancestors 'none' ;
  base-uri/form-action 'self' ; img-src 'self' data: (favicon). Seule exception
  documentée : Google Fonts (style-src/font-src scopés à ces 2 domaines).
- <meta name="referrer" content="no-referrer">.
- Harnais : nouveau check checkCSP (écoute securitypolicyviolation sur carte +
  salle → échoue à la moindre violation) ; normalisation du rendu via feuille
  construite (adoptedStyleSheets, CSP-safe) au lieu d'un <style> injecté ;
  bypass CSP ciblé pour l'injection d'axe (outil de test).
- docs/SECURITY.md : CSP, exception fonts, en-têtes serveur/CDN recommandés.

Les 9 écrans rendus CSP active à 0,00 % (sources ET dist/). 655 tests, lint vert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@decarvalhoe
decarvalhoe merged commit 3a2f827 into develop Jul 2, 2026
2 checks passed
@decarvalhoe
decarvalhoe deleted the feature/e10-5-csp branch July 2, 2026 14:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants