Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan håndterer Spatie/Laravel-CSP-pakken dynamiske nonces for inline-skript og stiler


Hvordan håndterer Spatie/Laravel-CSP-pakken dynamiske nonces for inline-skript og stiler


Spatie/laravel-CSP-pakken håndterer dynamiske nonces for inline-skript og stiler ved å generere en unik nonce-verdi per HTTP-forespørsel og automatisk injisere den i Content Security Policy (CSP) overskrifter og relevante HTML-elementer. Her er en detaljert forklaring på hvordan det fungerer:

Nonce Generation

- Pakken bruker et noncegenerator -grensesnitt for å generere en nonce -streng dynamisk for hver forespørsel.
- Som standard kan du implementere din egen ikke -generatorklasse som returnerer en unik tilfeldig streng. For eksempel kan du integrere med Laravel Vites nonce -system ved å lage en klasse som `Laravelvitenoncegenerator` som bruker` Vite :: CSPnonce () `for å få nonce generert av Vite under Asset Compilation.
- Du spesifiserer din nonce -generatorklasse i `nonce_generator` -nøkkelen til pakkens` csp.php` -konfigurasjonsfil.

Bruke ikke -retningslinjer i retningslinjer

-I din CSP-policy-klasse (som vanligvis utvider `Spatie \ CSP \ Policies \ Basic`), bruker du metoder som` addnoncefordirective (Direktiv :: skript) `og` addnoncefordirective (Direktiv :: Style) `for å indikere at en ikke-nonc.
- Dette sikrer at den genererte nonce er inkludert i CSP -overskriften for disse direktivene, slik at inline -skript og stiler som bærer den matchende Nonce -attributtet til Execute.

mellomvare- og overskriftsinjeksjon

- Pakken gir mellomvare (`Spatie \ CSP \ Addcspheaders`) som du registrerer deg i HTTP -kjernen eller på spesifikke ruter.
- Denne mellomvaren genererer NONCE for forespørselen, bruker CSP -policyen inkludert NonCE -direktivene, og legger til de aktuelle CSP -overskriftene til HTTP -svaret.
- Nonce -verdien er konsistent innenfor forespørselen, slik at du kan bruke bladdirektiver som `@nonce` eller hjelperfunksjoner som` csp_nonce () `i dine synspunkter for å sende ut nonce -attributtet på inline` `eller` -tagger.

Integrasjon med Laravel Vite

- Når du bruker Laravel Vite, kan pakken utnytte Vites innebygde nonce-generasjon via `Vite :: cspnonce ()`.
- Du kan opprette en tilpasset ikke-generatorklasse som returnerer Nonce fra Vite, slik at Nonce som brukes i CSP-overskriften samsvarer med Nonce som ble brukt på Vite-injiserte skript og stiler.
- Dette unngår CSP-brudd forårsaket av ikke-samsvar og tillater sikre inline-skript/stiler i Vite-drevne Laravel-apper.

Tilleggsfunksjoner

- Pakken støtter også gjengivelse av CSP -retningslinjer som metakoder (via `@cspmetatag` bladdirektiv) når du ikke kan kontrollere HTTP -overskrifter.
- Den støtter kun rapport-modus for testing av CSP-retningslinjer uten å blokkere ressurser.
- Du kan tilpasse retningslinjer for forskjellige miljøer (utvikling vs produksjon).

Praktiske notater

- Du må sørge for at nonce blir gitt ut på inline -skript/stiler ved å bruke bladet `@nonce` -direktivet eller` csp_nonce () `hjelper; Ellers vil nettleseren blokkere dem.
- Nettlesere som Chrome kan strippe ikke -attributter fra skriptkoder som er injisert dynamisk, så bruk nonce nøye og testatferd.
- Nonce er en tilfeldig streng generert per forespørsel, noe som gjør inline skript/stiler tryggere ved å bare la de med riktig nonce utføre.

Oppsummert genererer Spatie/Laravel-CSP dynamisk en nonce per forespørsel gjennom en konfigurerbar nonce-generator, inkluderer denne nonce i CSP-overskriftene for skript og stiler, og gir bladdirektiver og hjelpere for å sende ut Nonce-attributtet på inline elementer. Denne integrasjonen, spesielt med Laravel Vite, sikrer at inline-skript og stiler er sikkert tillatt av CSP uten å bruke usikre inline, forbedre applikasjonssikkerheten mens du opprettholder funksjonalitet [1] [2] [3] [4] [6].

Sitasjoner:
[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-ding-spatie-laravel-csp-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-cript-injiserte-by-vue-in-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-and-how-to-eable-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