statamic-csp-nonce.png

CSP Nonce — Addon Statamic

Open Source / oliweb.ch

Informations

Client
Open Source / oliweb.ch
Catégories
Applications Web Open Source
Technologies
PHP 8.3+ Statamic 6 Composer

Le cache statique half de Statamic stocke le HTML rendu à la première requête, puis le sert tel quel sur les requêtes suivantes via PHP. Lorsque la politique CSP de l'application génère un nonce par requête, ce nonce se retrouve figé dans le HTML mis en cache : les requêtes ultérieures reçoivent un nonce périmé, ce qui provoque le blocage de tous les scripts et styles soumis à la directive nonce-{value}.

Cet addon résout le problème en enregistrant un Replacer dans le cycle de cache de Statamic. Avant le stockage, chaque nonce présent dans le HTML est remplacé par un placeholder interne (%%CSP_NONCE%%). À chaque récupération depuis le cache, le placeholder est substitué par le nonce frais généré pour la requête en cours. Le HTML servi est toujours cohérent avec la politique CSP active.

L'intégration repose sur une convention minimale : le middleware CSP de l'application doit partager le nonce courant via view()->share('csp_nonce', $nonce). L'addon n'impose ni la génération des nonces ni la définition des directives CSP — ces responsabilités restent à la couche middleware de l'application.

Le ServiceProvider est auto-découvert par Composer. Aucune configuration n'est requise au-delà de la convention de partage du nonce. Publié en open-source sous licence MIT.

Ce que ce projet illustre de mon expertise

  • Résolution du nonce CSP figé en cache statique half : placeholder avant stockage, nonce frais réinjecté à chaque requête
  • Zéro configuration : ServiceProvider auto-découvert, aucune directive à déclarer
  • Convention explicite : le middleware CSP de l'application partage le nonce via view()->share() — l'addon ne génère rien lui-même
  • Séparation des responsabilités : l'addon gère uniquement le remplacement du nonce en cache, sans empiéter sur la politique CSP ni sur la génération des nonces