Supponiamo che un utente abbia eseguito il login a una piattaforma online. Dopo il login, l’utente rimane collegato per la durata della sessione (questo lasso di tempo viene gestito in modo molto diverso), senza dover immettere nuovamente la password. Questa situazione viene sfruttata dai criminali informatici: nella maggior parte dei casi, gli utenti collegati possono infatti eseguire più azioni e di più ampia portata rispetto agli utenti non collegati.
Il principio del CSRF spiegato in breve: mentre l’utente è collegato al portale, visita anche un altro sito web creato dall’hacker. Qui, l’utente esegue un’azione qualunque, ad esempio premere un pulsante. In seguito a questa azione, l’hacker invia una richiesta HTTP al portale utilizzato dall’utente e, camuffato con l’identità di quest’ultimo, esegue un’azione dannosa sfruttando il fatto che la sessione è ancora attiva. Per poter raggiungere il suo obiettivo, l’hacker deve soltanto conoscere la richiesta HTTP corretta che, tuttavia, è abbastanza semplice da individuare.
Il server del portale riconosce la richiesta HTTP come formulata correttamente e, leggendo i cookie corrispondenti, rileva che l’utente (o il relativo browser) è ancora collegato. Il server esegue l’azione e l’utente può non accorgersi che è appena stata effettuata un’operazione a suo nome.
L’attacco CSRF ha quindi successo perché il server ricevente non verifica la provenienza della richiesta. Il server non riesce nemmeno a sapere se la richiesta HTTP è stata generata tramite il proprio sito web o da un’origine esterna. L’autore dell’attacco sfrutta pertanto una debolezza del browser: quest’ultimo, infatti, inoltra le richieste senza valutare le conseguenze.
Le varianti di attacco CSRF utilizzate più di frequente sono tre: la più diffusa è l’invio di un URL trappola. Questo viene nascosto su un sito web esterno o in un’e-mail. L'apertura di questo URL fa partire la richiesta HTTP. In linea di principio, un URL è visibile dall’utente, a condizione che quest’ultimo vi presti attenzione. Tuttavia, alcune tecniche di social engeneering e URL spoofing permettono di camuffare l’origine dell’URL.
Esistono inoltre alcuni elementi di collegamento con il cosiddetto Cross Site Scripting (XSS): anziché costruire un proprio sito web dannoso, alcuni hacker manipolano con il XSS un sito web esistente, che viene quindi utilizzato per azioni criminali all’insaputa del gestore del sito. In generale, l’attacco consiste nell’iniettare nel sito web un codice JavaScript che, a sua volta, esegue l’attacco CSRF.
Un attacco Cross Site Request Forgery può avvenire anche quando l’hacker riesce a iniettare un software malevolo sul computer della vittima. L’hacker riesce così a comunicare direttamente al browser di inviare la richiesta HTTP. Chi, tuttavia, riesce a infiltrare virus o malware sul client, ha molte altre possibilità di attacco.