Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wie handelt es sich bei dem Spatie/Laravel-CSP-Paket mit dynamischen Nonces für Inline-Skripte und Stile um?


Wie handelt es sich bei dem Spatie/Laravel-CSP-Paket mit dynamischen Nonces für Inline-Skripte und Stile um?


Das Spatie/Laravel-CSP-Paket übernimmt dynamische Nonces für Inline-Skripte und -Stile, indem es einen eindeutigen Nonce-Wert pro HTTP-Anforderung generiert und diese automatisch in die Header (Content Security Policy) und relevante HTML-Elemente einfließen. Hier ist eine detaillierte Erklärung, wie es funktioniert:

Nonce Generation

- Das Paket verwendet eine Nongenerator -Schnittstelle, um für jede Anforderung dynamisch eine Nonce -String zu generieren.
- Standardmäßig können Sie Ihre eigene Nonce -Generatorklasse implementieren, die eine eindeutige zufällige Zeichenfolge zurückgibt. Zum Beispiel können Sie sich in das Nonce -System von Laravel Vite integrieren, indem Sie eine Klasse wie "LaravelVitenonceGenerator" erstellen, die "vite :: cspnonce ()" verwendet, um das von VITE erzeugte Nonce während der Vermögensverkomponation zu erhalten.
- Sie geben Ihre Nonce -Generatorklasse in der Taste "Nonce_generator" der Konfigurationsdatei `csp.php` des Pakets an.

Anwenden von Nonces in Richtlinien

- In your CSP policy class (which typically extends `Spatie\Csp\Policies\Basic`), you use methods like `addNonceForDirective(Directive::SCRIPT)` and `addNonceForDirective(Directive::STYLE)` to indicate that a nonce should be added to the `script-src` and `style-src` directives.
- Dies stellt sicher, dass der generierte NonCE für diese Anweisungen im CSP -Header enthalten ist, sodass Inline -Skripte und Stile, die das passende Nonce -Attribut ausführen, ausführen können.

Middleware und Header Injection

- Das Paket bietet Middleware (`spatie \ csp \ addcSpheaders`), das Sie sich in Ihrem HTTP -Kernel oder auf bestimmten Routen registrieren.
- Diese Middleware generiert den Nonce für die Anforderung, wendet die CSP -Richtlinie einschließlich der Nonce -Richtlinien an und fügt die entsprechenden CSP -Header der HTTP -Antwort hinzu.
- Der Nonce -Wert ist in der Anforderung konsistent, sodass Sie Blade -Direktiven wie `@nonce` oder Helferfunktionen wie` csp_nonce () `in Ihren Ansichten verwenden können, um das Nonce -Attribut auf Inline` `` oder `` `` tags auszugeben.

Integration in Laravel Vite

- Bei Verwendung von Laravel Vite kann das Paket die integrierte Nonce-Generation von Vite über `vite :: cspnonce ()` nutzen.
- Sie können eine benutzerdefinierte Nonce-Generatorklasse erstellen, die den Nonce von VITE zurückgibt, um sicherzustellen, dass der in dem CSP-Header verwendete NonCE den nicht an verwendeten Nonce-angewendet an Vite-Injected-Skripte und -stile entspricht.
- Dies vermeidet CSP-Verstöße, die durch nicht-CEC-Nichteinflüsse verursacht werden, und ermöglicht sichere Inline-Skripte/Stile in vite-betriebenen Laravel-Apps.

Zusätzliche Funktionen

- Das Paket unterstützt auch die Rendern von CSP -Richtlinien als Meta -Tags (über@@CspMetatag` -Blade -Anweisung), wenn Sie die HTTP -Header nicht steuern können.
- Es unterstützt nur den Bericht nur den Bericht zum Testen von CSP-Richtlinien, ohne Ressourcen zu blockieren.
- Sie können Richtlinien für verschiedene Umgebungen anpassen (Entwicklung gegen Produktion).

Praktische Notizen

- Sie müssen sicherstellen, dass die Nonce mithilfe der Klinge `@nonce` -Anweisung oder` csp_nonce () `Helfer auf Inline -Skripten/-stilen ausgegeben wird. Andernfalls blockiert der Browser sie.
- Browser wie Chrome können Nonce -Attribute aus Skript -Tags entziehen, die dynamisch injiziert wurden. Verwenden Sie also Nonce sorgfältig und testen Sie das Verhalten.
- Der Nonce ist eine zufällige Zeichenfolge, die pro Anforderung generiert wird und Inline -Skripte/Stile sicherer macht, indem nur diejenigen mit der richtigen Nonce ausgeführt werden können.

Zusammenfassend erzeugt Spatie/Laravel-CSP dynamisch eine Nonce pro Anforderung über einen konfigurierbaren Nonce-Generator, enthält diesen Nonce in den CSP-Headern für Skripte und Stile und bietet Blade-Richtlinien und Helpien, um das Nonce-Attribut für Inline-Elemente auszugeben. Diese Integration, insbesondere bei Laravel Vite, stellt sicher, dass Inline-Skripte und Stile vom CSP sicher zulässig sind, ohne unsicher in den In-Inline zu verwenden, wodurch die Anwendungssicherheit verbessert wird und die Funktionalität beibehält [1] [2] [3] [4] [6].

Zitate:
[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-alway-tempy-when-using-spatie-laravel-csp-larave-tempe-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-by-vue-in-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-and-how-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-t-laravel-official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src