Introduzione
CSRF (Cross-Site Request Forgery) è un attacco che, impersonando un utente autenticato, gli fa inviare richieste non volute. Ad esempio, supponi che la tua applicazione abbiaPOST /user/email per accettare la modifica dell’indirizzo email. Se un attaccante prepara su un altro sito un form che invia automaticamente a questo URL, l’indirizzo email dell’utente potrebbe essere modificato a sua insaputa.
In Laravel 13, grazie al meccanismo incluso nel gruppo di middleware web, la protezione CSRF è abilitata per impostazione predefinita.
Prevenzione degli attacchi CSRF
Il middlewarePreventRequestForgery di Laravel previene il CSRF con due livelli.
- Verifica dell’Origin (header
Sec-Fetch-Site) - Verifica del token (token CSRF per sessione)
Verifica dell’Origin
Laravel controlla inizialmenteSec-Fetch-Site per stabilire se la richiesta proviene dalla stessa Origin. È particolarmente efficace in ambiente HTTPS.
Se la verifica dell’Origin ha successo, la richiesta è consentita in quel momento. In caso contrario, viene eseguita la verifica del token CSRF come in passato.
Modalità Origin-only
Puoi disabilitare il fallback sulla verifica del token e affidarti solo alla verifica dell’Origin.403 anziché 419.
Se vuoi consentire richieste same-site, ad esempio tra sottodomini, imposta allowSameSite.
Verifica del token
Laravel genera un token CSRF per ciascuna sessione. Puoi ottenerlo concsrf_token() o dalla sessione.
POST, PUT, PATCH o DELETE in route web, includi sempre @csrf.
Esclusione di URI
Per le richieste inviate da servizi esterni, come i webhook di Stripe, potresti dover escludere URI specifici dalla protezione CSRF.Quando possibile, colloca le route dei webhook al di fuori del gruppo di middleware
web e mantieni le configurazioni di esclusione al minimo.Header X-CSRF-TOKEN
Laravel verifica non solo il_token del form ma anche l’header X-CSRF-TOKEN.
Per prima cosa emetti il token in un tag meta.
Header X-XSRF-TOKEN
Laravel invia anche un cookieXSRF-TOKEN cifrato. Axios e Angular possono impostare automaticamente questo valore nell’header X-XSRF-TOKEN per le richieste same-Origin.
Di conseguenza, in implementazioni SPA o AJAX ci sono casi in cui la protezione CSRF è attiva senza scrivere manualmente la configurazione degli header.