Per proteggere le applicazioni web dai problemi di sicurezza legati agli attacchi CSRF (Cross-Site Request Forgery) puo’ tornare utile implementare un secondo sistema di verifica oltre a quello del cookie. In molti casi viene utilizzato un codice identificativo random, assegnato nella fase di login, che l’utente si porta dietro finche’ non effettua il logout.
Stiamo parlando del Token di sessione, un ottimo sistema di sicurezza che ha lo scopo di garantire che l’utente abbia realmente visitato la pagina, che si sia loggato, e che ogni tipo di richiesta proviene da una pagina interna all’applicazione web.
Dunque, se un attaccante riesce ad indurre l’ignaro utente ad effettuare una richiesta da una pagina esterna al sito, l’assenza del token fara’ si che il server neghi l’accesso alla pagina richiesta.
Il token puo’ essere usato sia con il metodo POST che con GET, puo’ essere visibile nell’url o nascosto nel codice della pagina. In ogni caso, se una pagina interna che prevede la verifica del token e’ vulnerabile ad attacco XSS (Cross-Site Scripting) persistente prelevare il token ed eseguire richieste http non risulta essere un’operazione complicata.
Supponiamo che il token sia ben visibile nell’url, e la pagina vulnerabile sia ad esempio
http://www.esempio.com/esplora?token=abc123456789&pag;=paginaX
lo script persistente inserito nella pagina vulnerabile si preoccupera’ in primis di prelevare il token dall’url
var url=location.href;
var posizione=url.indexOf(‘token=’);
var tok=url.substr(posizione+6,12);
e poi di inoltrare la richiesta verso la pagina desiderata senza il consenso dell’utente
location.href=’http://www.esempio.com/acquista?token=’+tok+’pag=paginaY’;
Anche nel secondo caso, ossia quando il token e’ nascosto nel codice della pagina, lo script si preoccupera’ di effettuare il parsing del codice html per individuare il valore della variabile. L’operazione diventa un po’ piu’ complessa nel caso in cui il valore non e’ in chiaro ma necessita di un calcolo per ottenerlo …sara’ solo questione di tempo e qualche riga javascript in piu’.


ciao.