Spatie/Laravel-CSP-paketet hanterar dynamiska nonces för inline-skript och stilar genom att generera ett unikt nonce-värde per HTTP-begäran och injicera det automatiskt i innehållssäkerhetspolicy (CSP) -rubriker och relevanta HTML-element. Här är en detaljerad förklaring av hur det fungerar:
nonce -generation
- Paketet använder ett noncegenerator -gränssnitt för att generera en nonce -sträng dynamiskt för varje begäran.
- Som standard kan du implementera din egen nonce -generatorklass som returnerar en unik slumpmässig sträng. Till exempel kan du integrera med Laravel Vites nonce -system genom att skapa en klass som `Laravelvitenoncegenerator` som använder` Vite :: cSpnonce () `för att få nonce genererad av Vite under tillgångs sammanställning.
- Du anger din nonce -generatorklass i "nonce_generator" -nyckeln i paketets "csp.php" -konfigurationsfil.
Tillämpa nonces i policyer
-I din CSP-policyklass (som vanligtvis utvidgar `Spatie \ CSP \ Policies \ Basic ') använder du metoder som' AddnoncefordIREctive (Directive :: Script) 'och' AddnoncefordIREctive (Directive :: Style) 'för att indikera att en nonce bör läggas till i' Script-src 'och` Style-SRC' -stilen.
- Detta säkerställer att den genererade nonce ingår i CSP -rubriken för dessa direktiv, vilket tillåter inline -skript och stilar som bär det matchande nonce -attributet att utföra.
Middleware och rubrikinjektion
- Paketet tillhandahåller mellanprogram (`Spatie \ csp \ addcspheaders`) som du registrerar i din HTTP -kärna eller på specifika rutter.
- Denna mellanprogram genererar nonce för begäran, tillämpar CSP -policyn inklusive icke -direktiv och lägger till lämpliga CSP -rubriker till HTTP -svaret.
- Nonce -värdet är konsekvent inom begäran, så att du kan använda bladdirektiv som `@nonce` eller hjälpfunktioner som` csp_nonce () `i dina åsikter för att mata ut nonce -attributet på inline` `eller` `taggar.
Integration med Laravel Vite
- När du använder Laravel Vite kan paketet utnyttja Vites inbyggda nonce-generation via `Vite :: cSpnonce ()`.
- Du kan skapa en anpassad nonce-generatorklass som returnerar nonce från Vite, vilket säkerställer att den nonce som används i CSP-rubriken matchar den nonce som används på vite-injicerade skript och stilar.
- Detta undviker CSP-kränkningar orsakade av icke-felanpassningar och möjliggör säkra inline-skript/stilar i vite-driven Laravel-appar.
Ytterligare funktioner
- Paketet stöder också rendering av CSP -policyer som metataggar (via `@CSPmetatag` Blade Direktiv) när du inte kan kontrollera HTTP -rubriker.
- Det stöder endast rapportläge för att testa CSP-policyer utan att blockera resurser.
- Du kan anpassa policyer för olika miljöer (utveckling kontra produktion).
Praktiska anteckningar
- Du måste se till att nonce matas ut på inline -skript/stilar med hjälp av bladet `@nonce` direktiv eller` csp_nonce () `hjälper; Annars blockerar webbläsaren dem.
- Webbläsare som Chrome kan ta bort nonce -attribut från skripttaggar injicerade dynamiskt, så använd nonce noggrant och testa beteende.
- Nonce är en slumpmässig sträng som genereras per begäran, vilket gör inline -skript/stilar säkrare genom att endast tillåta de med rätt nonce att utföra.
Sammanfattningsvis genererar Spatie/Laravel-CSP dynamiskt en nonce per begäran genom en konfigurerbar nonce-generator, inkluderar denna nonce i CSP-rubrikerna för skript och stilar och ger bladdirektiv och hjälpare att mata ut nonce-attributet på inline-element. Denna integration, särskilt med Laravel Vite, säkerställer inline-skript och stilar är säkert tillåtna av CSP utan att använda osäker-inline, vilket förbättrar applikationssäkerheten samtidigt som funktionaliteten bibehålls [1] [2] [3] [4] [6].
Citeringar:
[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
]
[5] https://github.com/spatie/laravel-csp/discussions/96
]
]
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-officialpackages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/Script-Src