Einführung
CSRF (Cross-Site Request Forgery) ist ein Angriff, bei dem sich der Angreifer als eingeloggter Benutzer ausgibt und diesen ungewollte Anfragen absenden lässt. Angenommen, Ihre Anwendung stelltPOST /user/email bereit und akzeptiert damit E-Mail-Adressänderungen. Wenn ein Angreifer auf einer anderen Website ein Formular platziert, das diese URL automatisch aufruft, könnte die E-Mail-Adresse eines Nutzers geändert werden, ohne dass er es bemerkt.
In Laravel 13 ist der CSRF-Schutz durch die in der Middleware-Gruppe web enthaltenen Mechanismen standardmäßig aktiv.
Verhinderung von CSRF-Angriffen
Die MiddlewarePreventRequestForgery von Laravel schützt in zwei Schichten vor CSRF:
- Origin-Prüfung (Header
Sec-Fetch-Site) - Token-Prüfung (CSRF-Token pro Session)
Origin-Prüfung
Laravel prüft zunächstSec-Fetch-Site und stellt fest, ob die Anfrage vom selben Origin stammt. Das ist besonders in HTTPS-Umgebungen wirksam.
Besteht die Anfrage die Origin-Prüfung, wird sie direkt zugelassen. Andernfalls wird wie bisher die CSRF-Token-Prüfung ausgeführt.
Origin-only-Modus
Sie können das Fallback auf die Token-Prüfung deaktivieren und die Entscheidung nur anhand der Origin-Prüfung treffen.419 den Statuscode 403.
Möchten Sie Same-Site-Anfragen zulassen (z. B. zwischen Subdomains), setzen Sie allowSameSite.
Token-Prüfung
Laravel erzeugt pro Session ein CSRF-Token. Sie erhalten es übercsrf_token() oder aus der Session.
web-Routen Formulare mit POST, PUT, PATCH oder DELETE erstellen, binden Sie stets @csrf ein.
URIs ausschließen
Bei Anfragen von externen Diensten, etwa Webhooks von Stripe, ist es manchmal nötig, bestimmte URIs vom CSRF-Schutz auszunehmen.Wenn möglich, legen Sie Webhook-Routen außerhalb der Middleware-Gruppe
web ab und halten Sie die Ausschlussliste minimal.X-CSRF-TOKEN-Header
Laravel prüft nicht nur das Feld_token aus dem Formular, sondern auch den Header X-CSRF-TOKEN.
Geben Sie das Token zunächst in einem Meta-Tag aus.
X-XSRF-TOKEN-Header
Laravel setzt zusätzlich ein verschlüsseltesXSRF-TOKEN-Cookie. Axios und Angular übernehmen diesen Wert bei Same-Origin-Anfragen automatisch in den Header X-XSRF-TOKEN.
Dadurch greift der CSRF-Schutz in SPA- oder AJAX-Implementierungen häufig, ohne dass Sie den Header manuell setzen müssen.