Het Spatie/Laravel-CSP-pakket behandelt dynamische nonces voor inline scripts en stijlen door een unieke nonce-waarde per HTTP-aanvraag te genereren en het automatisch in te voeren in het contentbeveiligingsbeleid (CSP) en relevante HTML-elementen. Hier is een gedetailleerde uitleg over hoe het werkt:
Nonce Generation
- Het pakket maakt gebruik van een noncegenerator -interface om een nonce -string dynamisch te genereren voor elk verzoek.
- Standaard kunt u uw eigen nonce -generatorklasse implementeren die een unieke willekeurige tekenreeks retourneert. U kunt bijvoorbeeld integreren met het nonce -systeem van Laravel Vite door een klasse te maken zoals `LaravelvitenoncEnerator 'die' vite :: cspnonce () 'gebruikt om de nonce te laten gegenereerd door Vite tijdens activa -compilatie.
- U geeft uw nonce -generatorklasse op in de 'nonce_generator' -sleutel van het configuratiebestand' CSP.php 'van het pakket.
Nonces in beleid toepassen
-In uw CSP-beleidsklasse (die doorgaans `spatie \ csp \ beleid \ basic`) uitbreidt, gebruikt u methoden zoals` addNoncefordirective (richtlijn :: script) `en` addNoncefordirective (richtlijn :: style) `om aan te geven dat een nonce moet worden toegevoegd aan de` script-src` en `style-src` directies.
- Dit zorgt ervoor dat de gegenereerde nonce is opgenomen in de CSP -header voor deze richtlijnen, waardoor inline scripts en stijlen kunnen worden uitgevoerd die het bijpassende nonce -kenmerk dragen.
Middleware en headerinjectie
- Het pakket biedt middleware (`spatie \ csp \ addcspheaders`) die u registreert in uw HTTP -kernel of op specifieke routes.
- Deze middleware genereert de nonce voor het verzoek, past het CSP -beleid toe, inclusief de niet -CE -richtlijnen en voegt de juiste CSP -headers toe aan de HTTP -reactie.
- De nonce -waarde is consistent binnen het verzoek, zodat u mesrichtlijnen kunt gebruiken zoals `@nonce` of helperfuncties zoals` csp_nonce () `in uw weergaven om het nonce -kenmerk uit te voeren op inline` `of` `tags.
Integratie met Laravel Vite
- Bij gebruik van Laravel Vite kan het pakket de ingebouwde nonce-generatie van Vite gebruiken via `vite :: cspnonce ()`.
- U kunt een aangepaste nonce-generatorklasse maken die de nonce van Vite retourneert, zodat de nonce die in de CSP-header wordt gebruikt, overeenkomt met de nonce die wordt toegepast op vite-geïnjecteerde scripts en stijlen.
- Dit vermijdt CSP-overtredingen veroorzaakt door niet-onateling en maakt veilige inline scripts/stijlen mogelijk in vite-aangedreven laravel-apps.
extra functies
- Het pakket ondersteunt ook het renderen van CSP -beleid als meta -tags (via `@cspmetatag` Blade -richtlijn) wanneer u geen HTTP -headers kunt controleren.
- Het ondersteunt de modus alleen rapport voor het testen van CSP-beleid zonder bronnen te blokkeren.
- U kunt het beleid voor verschillende omgevingen aanpassen (ontwikkeling versus productie).
PRAKTISCHE OPMERKINGEN
- U moet ervoor zorgen dat de nonce wordt uitgevoerd op inline scripts/stijlen met behulp van het mes `@nonce` richtlijn of` csp_nonce () `helper; Anders zal de browser ze blokkeren.
- Browsers zoals Chrome kunnen niet -ACE -attributen ontdoen van scripttags die dynamisch worden geïnjecteerd, dus gebruik niet zorgvuldig en testgedrag.
- De nonce is een willekeurige string die per verzoek is gegenereerd, waardoor inline scripts/stijlen veiliger worden door alleen die met de juiste nonce toe te staan.
Samenvattend genereert Spatie/Laravel-CSP dynamisch een nonce per verzoek via een configureerbare nonce-generator, omvat deze nonce in de CSP-headers voor scripts en stijlen, en biedt mesrichtlijnen en helpers om het nonce-kenmerk op inline-elementen uit te voeren. Deze integratie, vooral met Laravel Vite, zorgt ervoor dat inline scripts en stijlen veilig door de CSP zijn toegestaan zonder onveilige-inline te gebruiken, de toepassingsbeveiliging te verbeteren met behoud van functionaliteit [1] [2] [3] [4] [6].
Citaten:
[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-alway-empty-wen-using-sing-laravel-cspwh-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp --in-in-in-inal- en script-geïnjecteerd-by-vue-in-a-laravel-and
[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-functional-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src