Le package Spatie / Laravel-CSP gère les nonces dynamiques pour les scripts et les styles en ligne en générant une valeur nonce unique par demande HTTP et en l'injectant automatiquement dans les en-têtes de politique de sécurité du contenu (CSP) et des éléments HTML pertinents. Voici une explication détaillée de son fonctionnement:
génération nonce
- Le package utilise une interface non-gentenerator pour générer une chaîne nonce dynamiquement pour chaque demande.
- Par défaut, vous pouvez implémenter votre propre classe de générateur nonce qui renvoie une chaîne aléatoire unique. Par exemple, vous pouvez vous intégrer au système nonce de Laravel Vite en créant une classe comme «LaravelviTenonceGenerator» qui utilise «Vite :: cspnonce ()» pour obtenir le nonce généré par Vite pendant la compilation des actifs.
- Vous spécifiez votre classe de générateur nonce dans la touche `nonce_generator` du fichier de configuration` csp.php` du package.
Appliquer les non-Générations dans les politiques
- Dans votre classe de stratégie CSP (qui étend généralement `spatie \ csp \ politiques \ basic`), vous utilisez des méthodes comme` AddNonceForDirective (directive :: script) `et` addNoncefordirective (directive :: style) `pour indiquer les directifs d'un nonce.
- Cela garantit que le NONCE généré est inclus dans l'en-tête CSP pour ces directives, permettant des scripts et des styles en ligne qui portent l'attribut nonce correspondant à l'exécution.
middleware et injection d'en-tête
- Le package fournit du middleware (`spatie \ csp \ addcspheaders`) que vous vous inscrivez dans votre noyau HTTP ou sur des itinéraires spécifiques.
- Ce middleware génère le NONCE pour la demande, applique la stratégie CSP, y compris les directives NONCE et ajoute les en-têtes CSP appropriés à la réponse HTTP.
- La valeur nonce est cohérente dans la demande, vous pouvez donc utiliser des directives de lame comme `@ nonce` ou des fonctions d'assistance comme` csp_nonce () 'dans vos vues pour sortir l'attribut nonce sur les balises en ligne `` ou ``.
Intégration avec Laravel Vite
- Lors de l'utilisation de Laravel Vite, le package peut tirer parti de la génération nonce intégrée de Vite via `Vite :: cspnonce () '.
- Vous pouvez créer une classe de générateurs nonce personnalisée qui renvoie le NONCE à partir de Vite, en veillant à ce que le NONCE utilisé dans l'en-tête CSP correspond au nonce appliqué aux scripts et styles à injection VITE.
- Cela évite les violations du CSP causées par des décalages non -ce et permet des scripts / styles en ligne sécurisés dans les applications Laravel alimentées à Vite.
fonctionnalités supplémentaires
- Le package prend également en charge les politiques CSP de rendu sous forme de balises META (via la directive de lame `@ cspmetatag`) lorsque vous ne pouvez pas contrôler les en-têtes HTTP.
- Il prend en charge le mode rapport uniquement pour tester les politiques CSP sans bloquer les ressources.
- Vous pouvez personnaliser des politiques pour différents environnements (développement vs production).
Notes pratiques
- Vous devez vous assurer que le nonce est sorti sur les scripts / styles en ligne à l'aide de la directive `@ nonce` @ nonce` ou` csp_nonce () `Helper; Sinon, le navigateur les bloquera.
- Les navigateurs comme Chrome peuvent supprimer les attributs nonce à partir de balises de script injectées dynamiquement, alors utilisez NONCE soigneusement et le comportement de test.
- Le NONCE est une chaîne aléatoire générée par demande, ce qui rend les scripts / styles en ligne plus sûrs en permettant uniquement à ceux avec le bon NONCE à exécuter.
En résumé, Spatie / Laravel-CSP génère dynamiquement un nonce par demande via un générateur nonce configurable, inclut ce NONCE dans les en-têtes CSP pour les scripts et les styles, et fournit des directives de lame et des aides pour produire l'attribut NONCE sur les éléments en ligne. Cette intégration, en particulier avec Laravel Vite, garantit que les scripts et les styles en ligne sont en toute sécurité par le CSP sans utiliser de sécurité dangereuse, améliorant la sécurité des applications tout en maintenant les fonctionnalités [1] [2] [3] [4] [6].
Citations:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-empty-when-using-spatie-laravel-csp-with-laravel-et-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-inneline-tyle-etcript-injected-by-vue-in-a-laravel-et
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-and-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-Nonce-to-Laravel-Official-Packages
[9] https://developer.mozilla.org/en-us/docs/web/http/heders/content-security-policy/script-src