1) L'utente è registrato in bank.com in una scheda, dove tutto è protetto dai token CSRF. Quindi apre evil.com in un'altra scheda.
2) Javascript in evil.com potrebbe provare a fare una richiesta POST a bank.com/send_money solo se sapesse csrf_token.
3) Per poter rivelare csrf_token, javascript in evil.com potrebbe provare a fare GET una chiamata ajax su bank.com/send_money per ottenere lo stesso utente html che otterrebbe visitando questa pagina nel suo browser. E poi leggi il token.
DOMANDA - perché l'ultimo passo fallirà e fallirà sempre?
Per quanto ho capito, bank.com risponderà effettivamente a questa richiesta e renderà tutto l'html semplicemente buono, ma sul lato client il browser deciderà che il contenuto proveniente da un altro dominio non dovrebbe essere accessibile, quindi fallisce.
Se c'è un iframe in evil.com su bank.com/send_money, l'iframe caricherà tutto l'html, ma di nuovo il browser deciderà che questo html non può essere usato da javascript e può essere visto solo in iframe. Pertanto, JS non può ottenere il token e non può effettuare la richiesta POST.
È corretto? Questo può essere ingannato?