Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon W jaki sposób pakiet spatie/laravel-cSP obsługuje dynamiczne nonces dla scenariuszy i stylów wbudowanych


W jaki sposób pakiet spatie/laravel-cSP obsługuje dynamiczne nonces dla scenariuszy i stylów wbudowanych


Pakiet Spatie/LaraVel-CSP obsługuje dynamiczne nonces dla scenariuszy i stylów wbudowanych, generując unikalną wartość nonce na żądanie HTTP i automatycznie wstrzykiwając go do nagłówków zasad bezpieczeństwa treści (CSP) i odpowiednich elementów HTML. Oto szczegółowe wyjaśnienie, jak to działa:

Nonce Generation

- Pakiet korzysta z interfejsu noncegenerator do dynamicznego generowania ciągu nonce dla każdego żądania.
- Domyślnie możesz zaimplementować własną klasę generatora nonce, która zwraca unikalny losowy ciąg. Na przykład możesz zintegrować się z systemem nonce Laravel Vite, tworząc klasę taką jak „laravelVitenonceGenerator”, który używa `vite :: cspnonce ()` Aby uzyskać niece wygenerowane przez VITE podczas kompilacji zasobów.
- Określisz klasę generatora nonce w kluczu „nonce_generator” pliku konfiguracyjnego pakietu `csp.php`.

Stosowanie nonces w zasadach

-W swojej klasie polityki CSP (która zazwyczaj rozszerza „spatie \ csp \ polityki \ podstawowe`), używasz metod takich jak` addnoncefordirective (dyrektywa :: script) `i` addnoncefordirective (dyrektywa:
- Zapewnia to, że wygenerowane nonce jest zawarte w nagłówku CSP dla tych dyrektyw, umożliwiając wykonanie skryptów i stylów wbudowanych, które niosą pasujący atrybut Nonce.

Warzące się środkową i nagłówkiem

- Pakiet zapewnia oprogramowanie pośrednie (`spatie \ csp \ addcSpheaders`), które rejestrujesz w jądrze HTTP lub na określonych trasach.
- To oprogramowanie pośrednie generuje nonce dla żądania, stosuje zasady CSP, w tym dyrektywy nonce i dodaje odpowiednie nagłówki CSP do odpowiedzi HTTP.
- Wartość nonce jest spójna w żądaniu, dzięki czemu możesz użyć dyrektyw Blade, takich jak `@@nonce` lub funkcje pomocnicze, takie jak` csp_nonce () `w twoich widokach, aby wyświetlić atrybut nonce na tagach` `lub` `.

Integracja z Laravel Vite

- Podczas korzystania z Laravel Vite pakiet może wykorzystać wbudowane wytwarzanie VITE Nonce za pośrednictwem „VITE :: cspnonce ()`.
- Możesz utworzyć niestandardową klasę generatora nonce, która zwraca Nonce z VITE, zapewniając, że nonce użyte w nagłówku CSP pasuje do scenariuszy i stylów wtryskiwanych przez VITE.
- Unika to naruszeń CSP spowodowanych niedopasowaniami nonce i umożliwia bezpieczne wbudowane skrypty/style w aplikacjach Laravel z napędem.

Dodatkowe funkcje

- Pakiet obsługuje również renderowanie zasad CSP jako metatagów (za pośrednictwem dyrektywy@@cspMetatag` Blade Dyrektywa), gdy nie można kontrolować nagłówków HTTP.
- Obsługuje tryb raportowy do testowania zasad CSP bez blokowania zasobów.
- Możesz dostosować zasady dla różnych środowisk (rozwój vs produkcja).

Notatki praktyczne

- Musisz upewnić się, że nonce jest wysyłane na skryptach/stylach inline za pomocą dyrektywy Blade `@nonce` lub` csp_nonce () `helper; W przeciwnym razie przeglądarka je zablokuje.
- Przeglądarki, takie jak Chrome, mogą usunąć atrybuty nonce z tagów skryptowych wstrzykniętych dynamicznie, więc uważnie użyj zachowania Nonce i testuj.
- Nonce jest losowym ciągiem generowanym na żądanie, dzięki czemu scenariusze/style wbudowane są bezpieczniejsze, umożliwiając wykonanie tylko osób z prawidłowym nonce.

Podsumowując, spatie/laravel-csp dynamicznie generuje nonce na żądanie za pośrednictwem konfigurowalnego generatora nonce, obejmuje ten nonce w nagłówkach CSP dla skryptów i stylów oraz zapewnia dyrektywy ostrzy i pomocników do wyświetlania atrybutu nonce na elementach wbudowanych. Ta integracja, szczególnie w przypadku Laravel Vite, zapewnia, że ​​skrypty i style wbudowane są bezpiecznie dozwolone przez CSP bez korzystania z niebezpiecznych in-linii, zwiększając bezpieczeństwo aplikacji przy jednoczesnym zachowaniu funkcjonalności [2] [3] [4] [6].

Cytaty:
[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://stackaverflow.com/questions/75106343/nonce-is-always-empty-when-using-spatie-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/Laravel-csp/discussions/96
[6] https://stackaverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline-style-and-scriptintited-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-faccial-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src