CSRF-Schutz


Einführung

CSRF - Whitelist
  • X-CSRF-Token
  • X-XSRF-To ken
Einführung

Laravel Sie können Ihre Anwendungen ganz einfach vor Cross-Site-Request-Forgery-Angriffen (CSRF) schützen, einem böswilligen Angriff, der sich auf die Identität eines authentifizierten Benutzers verlässt, um nicht autorisierte Befehle auszuführen.

Laravel generiert automatisch ein CSRF-„Token“ für jede aktive Benutzersitzung. Mithilfe des Tokens wird überprüft, ob der authentifizierte Benutzer derjenige ist, der die Anfrage an die Anwendung stellt.
Wenn Sie in Ihrer Anwendung ein HTML-Formular definieren, sollten Sie ein verstecktes CSRF-Tag-Feld in das Formular einfügen, damit die CSRF-Schutz-Middleware die Anfrage validieren kann. Sie können die

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.

@csrfCSRF-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

-Meta-Tag, der bei der Axios-HTTP-Bibliothek registriert ist. Wenn Sie diese Bibliothek nicht verwenden, müssen Sie dieses Verhalten für Ihre Anwendung manuell konfigurieren.


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 im csrf-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.

Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.