Sicurezza framework Web UI - cross - site request forgery

La struttura Web UI fornisce protezione per l'applicazione da CSRF (cross - site request forgery), che sfrutta in modo dannoso un sito Web in cui i comandi non autorizzati vengono trasmessi da un utente affidabile per il sito Web. CSRF (chiamato anche XSRF) è diverso da cross - site scripting (CSS o XSS), che sfrutta l'attendibilità che un utente ha per un particolare sito. CSRF è anche noto come attacco con un solo clic, sidejacking o session riding.

CSRF funziona includendo un link o uno script in una pagina che accede a un sito a cui l'utente è noto (o si suppone) di aver autenticato. Ad esempio, l'utente A potrebbe navigare in un forum in cui l'utente B ha pubblicato un messaggio. Con CSRF, l'utente B può creare il seguente elemento immagine HTML che, invece di essere un file immagine, fa riferimento a uno script sul sito web della banca dell'utente A e richiede un prelievo di $1.000.000:

<img src="http://bank.example/withdraw?amount=1000000&for=USER-B">

Se la banca dell'utente A conserva le proprie informazioni di autenticazione in un cookie, e se il cookie non è scaduto, il tentativo da parte del browser dell'utente A di caricare l'immagine invierà il modulo di prelievo con il cookie di autenticazione e autorizzerà una transazione senza l'approvazione dell'utente A.

In questo scenario, il problema può essere riassunto nei seguenti tre punti:
  • A causa della politica del browser, i cookie di autenticazione vengono inviati al server della banca anche se la richiesta ha avuto origine da un sito Web diverso.
  • La banca dell'utente A memorizza le informazioni di autenticazione in un cookie e si basa completamente sui cookie per scopi di autenticazione.
  • La banca dell'utente A non fa differenza tra le richieste GET e POST.
La protezione CSRF nella struttura Web UI non si applica al primo punto, poiché è una politica del browser. Ma si applica al secondo e terzo punto utilizzando sia un cookie che un token aggiuntivo per l'autenticazione. Gli attacchi CSRF vengono generalmente evitati controllando sempre un token univoco in ogni richiesta che raggiunge il server. Nella struttura Web UI , il token viene utilizzato nel modo seguente:
  1. Al termine del login, viene impostato un token appena creato per la sessione (per scopi di convalida). Questo token è disponibile sul lato client dell'applicazione.
  2. Il token viene utilizzato nei seguenti modi:
    • Questo token viene utilizzato per tutte le richieste AJAX e all'interno dei programmi di utilità della struttura Web UI .
    • Quando viene effettuata una richiesta POST o GET al server, l'applicazione convalida automaticamente che il token CSRF è disponibile nella richiesta.