Introductie
CSRF (Cross-Site Request Forgery) is een aanval waarbij een ingelogde gebruiker onbedoeld requests verstuurt terwijl de aanvaller zich als die gebruiker voordoet. Stel bijvoorbeeld dat je app eenPOST /user/email-endpoint heeft waarmee het e-mailadres gewijzigd kan worden. Als een aanvaller op een andere site een formulier plaatst dat automatisch naar deze URL verstuurt, kan het e-mailadres van de gebruiker gewijzigd worden zonder dat die het merkt.
In Laravel 13 is CSRF-bescherming standaard ingeschakeld dankzij het mechanisme dat in de web-middlewaregroep zit.
CSRF-aanvallen voorkomen
DePreventRequestForgery-middleware van Laravel voorkomt CSRF met de volgende twee lagen:
- Origin-verificatie (de
Sec-Fetch-Site-header) - Tokenverificatie (een CSRF-token per sessie)
Origin-verificatie
Laravel controleert eerstSec-Fetch-Site om te bepalen of het request van dezelfde Origin komt. Dit is vooral effectief in HTTPS-omgevingen.
Als de Origin-verificatie slaagt, wordt het request op dat moment toegestaan. Slaagt die niet, dan wordt zoals voorheen de CSRF-tokenverificatie uitgevoerd.
Origin-only-modus
Je kunt de terugval op tokenverificatie ook uitschakelen en alleen op basis van Origin-verificatie beslissen.403 terug in plaats van een 419.
Als je same-site wilt toestaan, bijvoorbeeld voor requests tussen subdomeinen, stel je allowSameSite in.
Tokenverificatie
Laravel genereert per sessie een CSRF-token. Je kunt dit ophalen metcsrf_token() of uit de sessie.
web-routes formulieren maakt met POST, PUT, PATCH of DELETE, moet je altijd @csrf opnemen.
URI’s uitsluiten
Voor requests die van externe services komen, zoals webhooks van Stripe, kun je specifieke URI’s uitsluiten van CSRF-bescherming.Plaats webhook-routes indien mogelijk buiten de
web-middlewaregroep en houd het aantal uitsluitingen minimaal.De X-CSRF-TOKEN-header
Laravel verifieert niet alleen het_token in formulieren, maar ook de X-CSRF-TOKEN-header.
Zet het token eerst in een meta-tag:
De X-XSRF-TOKEN-header
Laravel verstuurt ook een versleuteldeXSRF-TOKEN-cookie. Axios en Angular kunnen deze waarde bij requests naar dezelfde Origin automatisch in de X-XSRF-TOKEN-header zetten.
Daardoor is CSRF-bescherming in SPA- en AJAX-implementaties vaak actief zonder dat je de header handmatig hoeft in te stellen.