Il pacchetto Spatie/Laravel-CSP gestisce non GECS dinamici per script e stili in linea generando un valore non CE univoco per richiesta HTTP e l'iniezione automatica nelle intestazioni della politica di sicurezza dei contenuti (CSP) e gli elementi HTML pertinenti. Ecco una spiegazione dettagliata di come funziona:
nonce generazione
- Il pacchetto utilizza un'interfaccia non accelegenerator per generare una stringa nonce dinamicamente per ciascuna richiesta.
- Per impostazione predefinita, è possibile implementare la propria classe di generatore nonce che restituisce una stringa casuale univoca. Ad esempio, è possibile integrarti con il sistema nonce di Laravel Vite creando una classe come `LaravenonCogenerator` che utilizza` Vite :: cspnonce () `per ottenere il nonce generato da Vite durante la compilazione delle risorse.
- Specifica la tua classe Generatore nonce nella chiave `nonce_generator` del file di configurazione` csp.php` del pacchetto.
Applicazione di non Escs nelle politiche
-Nella tua classe di politica CSP (che in genere estende `Spatie \ CSP \ Policies \ Basic`), usi metodi come` AddNonceFirective (Directive :: Script) `e` AddNonceforditive (Directive :: Style) `per indicare che una nonce dovrebbe essere aggiunta al` Script-Src` e `Stile-Stile".
- Ciò garantisce che il nonce generato sia incluso nell'intestazione CSP per queste direttive, consentendo di eseguire script e stili in linea che trasportano l'attributo nonce corrispondente.
Middleware e iniezione di intestazione
- Il pacchetto fornisce middleware (`spatie \ csp \ addcspheaders`) che ti registri nel kernel HTTP o su percorsi specifici.
- Questo middleware genera il nonce per la richiesta, applica la politica CSP comprese le direttive nonce e aggiunge le intestazioni CSP appropriate alla risposta HTTP.
- Il valore nonce è coerente nella richiesta, quindi puoi utilizzare direttive della lama come `@nonce` o funzioni helper come` csp_nonce () `nelle vostre opinioni per produrre l'attributo nonce su tag inline` `o` ``.
Integrazione con Laravel Vite
- Quando si utilizza laravel Vite, il pacchetto può sfruttare la generazione nonce integrata di Vite tramite `Vite :: cspnonce ()`.
- È possibile creare una classe di generatori non di nonce personalizzata che restituisca la nonce da Vite, garantendo che la nonce utilizzata nell'intestazione CSP corrisponda al nonce applicato agli script e agli stili iniettati da Vite.
- Ciò evita le violazioni del CSP causate da disallineamenti nonce e consente script/stili in linea sicuri nelle app Laravel alimentate con Vite.
funzionalità aggiuntive
- Il pacchetto supporta anche il rendering di politiche CSP come meta tag (tramite la direttiva Blade@@cspmetag`) quando non è possibile controllare le intestazioni HTTP.
- Supporta la modalità solo report per testare le politiche CSP senza bloccare le risorse.
- È possibile personalizzare le politiche per ambienti diversi (sviluppo vs produzione).
Note pratiche
- È necessario assicurarsi che il nonce venga emesso su script/stili in linea usando la direttiva Blade `@nonce` o` csp_nonce () `helper; Altrimenti, il browser li bloccerà.
- I browser come Chrome possono spogliare gli attributi nonce dai tag di script iniettati in modo dinamico, quindi usa il comportamento di nonce attentamente e test.
- La nonce è una stringa casuale generata per richiesta, rendendo più sicuri script/stili in linea consentendo solo a quelli con il nonce corretto da eseguire.
In sintesi, Spatie/Laravel-CSP genera dinamicamente una nonce per richiesta tramite un generatore di nonce configurabile, include questa nonce nelle intestazioni CSP per script e stili e fornisce direttive e aiutanti a lama per produrre l'attributo nonce sugli elementi in linea. Questa integrazione, in particolare con Laravel Vite, garantisce che gli script e gli stili in linea siano consentiti in modo sicuro dal CSP senza utilizzare in linea non sicura, migliorando la sicurezza delle applicazioni mantenendo funzionalità [1] [2] [3] [4] [6].
Citazioni:
[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-cs-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline-style-and-script-inject-by-vue-in-alaravel- e
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-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/headers/content-security-policy/script-src