CSRF-Schutz
Blade-Anweisung verwenden, um das Token zu generieren wie folgt:
<form method="POST" action="/profile"> @csrf ... </form>
ist in der Web-Middleware-Gruppe
Middleware enthalten Überprüft automatisch, ob das Token in der Anfrage mit dem in der Sitzung gespeicherten Token übereinstimmt.@csrf
CSRF-Token und JavaScript
Beim Erstellen einer JavaScript-gesteuerten Anwendung können Sie die JavaScript-HTTP-Funktionsbibliothek ganz einfach automatisch an jede Anfrage anhängen lassen das CSRF-Token. Standardmäßig verwenden VerifyCsrfToken
-Dateien den Wert im
resources/js/bootstrap.js
CSRF-Whitelist
Manchmal möchten Sie möglicherweise eine Reihe unerwünschter CSRF-geschützter URLs festlegen. Wenn Sie beispielsweise Stripe zum Verarbeiten von Zahlungen verwenden und deren Webhook-System verwenden, müssen Sie die Stripe-Webhook-Handler-Route vom CSRF-Schutz ausschließen, da Stripe kein CSRF-Token an Ihre Route sendet.
Normalerweise können Sie diesen Routentyp außerhalb von routes/web.php
platzieren, da die RouteServiceProvider
-Middleware von web
für alle Routen in der Datei gilt. Sie können den CSRF-Schutz für solche Routen jedoch auch ausschließen, indem Sie solche URLs wie folgt zum VerifyCsrfToken
-Attribut der $except
-Middleware hinzufügen:
<?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class VerifyCsrfToken extends Middleware{ /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'stripe/*', 'http://example.com/foo/bar', 'http://example.com/foo/*', ]; }
{tip} Wenn beim Ausführen von Tests die CSRF-Middleware wird automatisch deaktiviert.
X-CSRF-TOKEN
Zusätzlich zur Prüfung auf das CSRF-Token im POST-Parameter , VerifyCsrfToken
Die Middleware prüft auch den X-CSRF-TOKEN
Request-Header. Sie sollten das Token in einem HTML-meta
-Tag wie diesem speichern:
<meta name="csrf-token" content="{{ csrf_token() }}">
Sobald Sie dann das meta
-Tag erstellt haben, können Sie eine Bibliothek wie jQuery anweisen, das Token automatisch allen Anforderungen im hinzuzufügen Header-Informationen. Es kann auch einen einfachen und bequemen CSRF-Schutz für AJAX-basierte Anwendungen bieten. Wie folgt:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
{tip} Standardmäßig verwendet die
resources/js/bootstrap.js
-Datei die Axios HTTP-Funktionsbibliothek, um den Wert imcsrf-token
-Meta-Tag zu registrieren. Wenn Sie diese Bibliothek nicht verwenden, müssen Sie dieses Verhalten für Ihre Anwendung manuell konfigurieren.
X-XSRF-TOKEN
Laravel speichert den aktuellen CSRF-Token in einem XSRF-TOKEN
Cookie
, das in jeder vom Framework generierten Antwort enthalten ist. Sie können Cookie-Werte verwenden, um X-XSRF-TOKEN
-Anfrageheader festzulegen.
Dieses Cookie wird in erster Linie aus praktischen Gründen gesendet, da einige JavaScript-Frameworks und -Bibliotheken wie Angular und Axios ihren Wert automatisch in den X-XSRF-TOKEN
-Header einfügen.