Balík Spatie/Laravel-CSP sa zaoberá dynamickými nonciami pre inline skripty a štýly generovaním jedinečnej hodnoty nonce na požiadavku HTTP a automaticky ju vstrekuje do hlavičiek politiky zabezpečenia obsahu (CSP) a príslušných prvkov HTML. Tu je podrobné vysvetlenie toho, ako to funguje:
Nonce Generation
- Balík používa rozhranie necegenerátora na generovanie reťazca nonce dynamicky pre každú žiadosť.
- V predvolenom nastavení môžete implementovať svoju vlastnú triedu Generátora nonce, ktorá vracia jedinečný náhodný reťazec. Napríklad sa môžete integrovať s nonce systémom Laravel Vite vytvorením triedy, ako je `laravelvitenoncegenerator`, ktorý používa` vite :: cspnonce () `na získanie nonce generovaného spoločnosťou VITE počas kompilácie aktív.
- Určite svoju triedu Nonce Generator v klávesovom tlačidle `nonce_generator` konfiguračného súboru CSP.Php`.
Aplikácia noncií v politikách
-Vo vašej triede politiky CSP (ktorá zvyčajne rozširuje `Spatie \ CSP \ Politiky \ basic`), používate metódy ako` addnoncefordirectional (Smernitívu :: Script) `a` AddnonCefordirection (Smertive :: Style) `naznačuje, že nonce by sa mal pridať k„ skriptu-Src` a `Style-S 'Style-src`.
- To zaisťuje, že generovaná nonce je zahrnutá v hlavičke CSP pre tieto smernice, čo umožňuje inline skripty a štýly, ktoré nesú vykonanie zodpovedajúceho atribútu Nonce.
Middleware and Header Injekcia
- Balík poskytuje middleware (`Spatie \ csp \ addcspheaders`), ktorý sa zaregistrujete vo svojom jadre HTTP alebo na konkrétnych trasách.
- Tento middleware generuje Nonce pre žiadosť, aplikuje politiku CSP vrátane smerníc Nonce a do odpovede HTTP pridáva príslušné hlavičky CSP.
- Hodnota nonce je konzistentná v rámci požiadavky, takže môžete použiť smernice Blade, ako napríklad `@nonce` alebo pomocné funkcie ako` csp_nonce () `vo svojich pohľadoch na výstup atribútu nonce na inline` `alebo` `značky.
Integrácia s Laravel Vite
- Pri používaní Laravel Vite môže balík využiť zabudovanú nečlennú generáciu spoločnosti Vite prostredníctvom `vite :: cspnonce ()`.
- Môžete si vytvoriť vlastnú triedu necelárov, ktorá vracia nonce z VITE, čím sa zabezpečí, že nonce použitá v hlavičke CSP sa zhoduje s nonce aplikovaným na skripty a štýly s injekčným vizitom.
- Tým sa vyhýba porušenia CSP spôsobené nesúladom nonce a umožňuje zabezpečené inline skripty/štýly v aplikáciách Laravel poháňané VITE.
Ďalšie funkcie
- Balík tiež podporuje vykresľujúce politiky CSP ako meta tagy (prostredníctvom smernice@CSPMetatag` Blade Smernice), keď nemôžete ovládať hlavičky HTTP.
- Podporuje režim iba pre správu na testovanie politík CSP bez blokovania zdrojov.
- Môžete si prispôsobiť politiky pre rôzne prostredia (vývoj verzus výroba).
Praktické poznámky
- Musíte sa ubezpečiť, že nonce je výstup na inline skriptoch/štýloch pomocou smernice Blade `@nonce` alebo` csp_nonce () `pomocník; V opačnom prípade ich prehliadač zablokuje.
- Prehliadače, ako je Chrome, sa môžu vyzliekať atribúty nonce zo značiek skriptov, ktoré sa injektujú dynamicky, takže používajte starostlivo a testujte správanie.
- Nonce je náhodný reťazec generovaný na žiadosť, vďaka čomu sú bezpečnejšie inline skripty/štýly tým, že umožňujú vykonávať iba tých, ktorí majú správnu nonce.
Stručne povedané, Spatie/Laravel-CSP dynamicky generuje nonce na žiadosť prostredníctvom konfigurovateľného generátora nonce, zahŕňa tento nonce v hlavičkách CSP pre skripty a štýly a poskytuje smernice a pomocníkov čepele na výstup atribútu nonce na inline prvky. Táto integrácia, najmä s Laravel Vite, zaisťuje, že CSP je bezpečne povolené vložené skripty a štýly bez použitia nebezpečného inline, čím sa zlepšuje bezpečnosť aplikácií pri zachovaní funkčnosti [1] [2] [3] [4] [6].
Citácie:
[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-wen-using-using-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-tyle-and-script-injekt-injekt----ue-in-in-aravel-and-and
[7] https://www.stackhawk.com/blog/Laravel-content-security-policy-guide-what-it-is-m----tow-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-tolaravel-oficial-pacgage
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src