Spatie/Laravel-CSP-pakken håndterer dynamiske ikke-søger til inline-scripts og -stilarter ved at generere en unik ikke-værdi pr. HTTP-anmodning og automatisk indsprøjte den i CONTROL Security Policy (CSP) overskrifter og relevante HTML-elementer. Her er en detaljeret forklaring af, hvordan det fungerer:
Nonce Generation
- Pakken bruger en noncegenerator -grænseflade til at generere en nonce -streng dynamisk til hver anmodning.
- Som standard kan du implementere din egen ikke -generatorklasse, der returnerer en unik tilfældig streng. For eksempel kan du integrere med Laravel Vites Nonce -system ved at oprette en klasse som `laravelvitenonceGenerator`, der bruger` Vite :: cspnonce () `for at få den ikke -cev genereret af Vite under aktivsamling.
- Du specificerer din Nonce Generator -klasse i `Nonce_Generator` -nøglen til pakkens` csp.php` -konfigurationsfil.
Anvendelse af nonces i politikker
-I din CSP-politikklasse (som typisk udvider `spatie \ CSP \ Policies \ Basic`) bruger du metoder som` addnoncefordirective (direktiv :: script) `og` addnonceFordirective (direktiv :: stil) `for at indikere, at en nonce skal tilføjes til` script-src` og `style-src` direktiv.
- Dette sikrer, at den genererede nonce er inkluderet i CSP -overskriften til disse direktiver, hvilket tillader inline -scripts og stilarter, der bærer den matchende ikke -attribut at udføre.
Middleware og header -injektion
- Pakken leverer middleware (`spatie \ csp \ addcspreeSs`), som du registrerer i din HTTP -kerne eller på specifikke ruter.
- Denne mellemvare genererer Nonce for anmodningen, anvender CSP -politikken inklusive Nonce -direktiver og tilføjer de relevante CSP -overskrifter til HTTP -svaret.
- Nonce -værdien er konsistent inden for anmodningen, så du kan bruge bladdirektiver som `@nonce` eller hjælperfunktioner som` csp_nonce () `i dine synspunkter til at udsende nonce -attributten på inline` `eller` `tags.
Integration med Laravel Vite
- Når du bruger Laravel Vite, kan pakken udnytte Vite's indbyggede ikke-generation via `Vite :: cspnonce ()`.
- Du kan oprette en brugerdefineret nonce-generatorklasse, der returnerer nonce fra Vite, hvilket sikrer, at Nonce, der bruges i CSP-overskriften, matcher den ikke-kendte, der er anvendt til Vite-injicerede scripts og stilarter.
- Dette undgår CSP-overtrædelser forårsaget af ikke-uoverensstemmelser og tillader sikre inline-scripts/stilarter i Vite-drevne Laravel-apps.
Yderligere funktioner
- Pakken understøtter også gengivelse af CSP -politikker som metatags (via `@cspmetatag` bladdirektiv), når du ikke kan kontrollere HTTP -overskrifter.
- Det understøtter kun rapporttilstand til test af CSP-politikker uden at blokere ressourcer.
- Du kan tilpasse politikker til forskellige miljøer (udvikling vs produktion).
Praktiske noter
- Du skal sikre dig, at nonce udsendes på inline -scripts/stilarter ved hjælp af klingen `@nonce` -direktiv eller` csp_nonce () `hjælper; Ellers blokerer browseren dem.
- Browsere som Chrome kan stribe ikke -egenskaber fra script -tags injiceret dynamisk, så brug nonce omhyggeligt og test opførsel.
- Nonce er en tilfældig streng, der er genereret pr. Anmodning, hvilket gør inline -scripts/stilarter sikrere ved kun at lade dem med den rigtige nonce udføres.
Sammenfattende genererer spatie/Laravel-CSP dynamisk en nonce pr. Anmodning gennem en konfigurerbar nonce-generator, inkluderer denne ikke-CSP-overskrifter til scripts og stilarter og giver bladdirektiver og hjælpere til at udsende ikke-attributten på inline-elementer. Denne integration, især med Laravel Vite, sikrer inline-scripts og stilarter er sikkert tilladt af CSP uden at bruge usikker inline, hvilket forbedrer applikationssikkerheden, mens den opretholder funktionalitet [1] [2] [3] [4] [6].
Citater:
[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-official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src