Balíček Spatie/Laravel-CSP zpracovává dynamické nonces pro inline skripty a styly generováním jedinečné hodnoty Nonce na požadavek HTTP a automaticky vstřikováním do záhlaví zabezpečení obsahu (CSP) a příslušných prvků HTML. Zde je podrobné vysvětlení, jak to funguje:
Nonce Generation
- Balíček používá rozhraní necegenerátoru k dynamickému vygenerování řetězce nonce pro každý požadavek.
- Ve výchozím nastavení můžete implementovat vlastní třídu generátoru nonce generátoru, která vrací jedinečný náhodný řetězec. Například se můžete integrovat do systému Noce Laravel Vite vytvořením třídy, jako je „LaravelVitenonceGenerator“, která používá `vite :: cspnonce ()`, aby se získalo generované společností VITE během kompilace aktiv.
- Zadáte svou třídu generátoru nonce v klíči „NONCE_Generator“ v konfiguračním souboru CSP.PHP` balíčku.
Použití nonces v politikách
-Ve vaší třídě politiky CSP (která obvykle rozšiřuje `Spatie \ CSP \ Polities \ Basic`), používáte metody jako` addnonceforditivní (direktiva :: skript) `a` addnonceforditivní (direktiva :: styl) `, aby naznačoval, že by se mělo přidat do směrnice o stylu a`.
- Tím je zajištěno, že generované nonce je pro tyto směrnice zahrnuto do záhlaví CSP, což umožňuje inline skripty a styly, které nesou odpovídající atribut nonce k provedení.
Middleware and Header Injection
- Balíček poskytuje middleware (`Spatie \ csp \ addcspheaders`), který se zaregistrujete v jádru HTTP nebo na konkrétních trasách.
- Tento middleware generuje NOCE pro požadavek, použije politiku CSP včetně směrnic nonce a přidá příslušné záhlaví CSP k odpovědi HTTP.
- Hodnota nonce je v rámci požadavku konzistentní, takže můžete použít směrnice Blade jako `@nonce` nebo pomocníky jako` csp_nonce () `podle vašich názorů na vydání atributu nonce na inline` `nebo` `tags.
Integrace s Laravel Vite
- Při používání Laravel Vite může balíček využít vestavěnou generaci VITE prostřednictvím `Vite :: Cspnonce ()`.
- Můžete vytvořit vlastní třídu generátoru NONCE, která vrací noce z Vite a zajistit, aby nonce použité v záhlaví CSP odpovídalo nonce aplikovaným na skripty a styly vstřikované VITE.
- Tím se zabrání porušování CSP způsobené neshodami nece a umožňuje zabezpečené inline skripty/styly v aplikacích Laravel poháněných Vite.
Další funkce
- Balíček také podporuje vykreslování zásad CSP jako meta značek (prostřednictvím směrnice `@cspMetatag` Blade), pokud nemůžete ovládat záhlaví HTTP.
- Podporuje režim pouze pro testování zásad CSP bez blokování zdrojů.
- Zásady můžete přizpůsobit pro různá prostředí (vývoj vs. výroba).
Praktické poznámky
- Musíte se ujistit, že nonce je výstup na inline skriptech/stylech pomocí směrnice Blade `@nonce` nebo` csp_nonce () `pomocník; Jinak je prohlížeč zablokuje.
- Prohlížeče, jako je Chrome, mohou dynamicky injikovat atributy nece ze skriptů, takže pečlivě používejte a testujte chování.
- NOCE je náhodný řetězec generovaný na požadavek, díky čemuž jsou vloženy skripty/styly bezpečnější tím, že umožňují provádět pouze ty, kteří mají správnou nonce.
Stručně řečeno, Spatie/Laravel-CSP dynamicky generuje neces na požadavek prostřednictvím konfigurovatelného generátoru nonce, zahrnuje tento nonce v záhlaví CSP pro skripty a styly a poskytuje směrnice a pomocníky čepele a vydává atribut nonce na inline prvcích. Tato integrace, zejména s Laravel Vite, zajišťuje, že CSP bezpečně povolí inline skripty a styly bez použití nebezpečného inline a zvýšení bezpečnosti aplikací při zachování funkčnosti [1] [2] [3] [4] [6].
Citace:
[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-patie-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-script-inject-be-raravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it- a-how-to-anable-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