Perché non puoi rubare il token del sincronizzatore per fare CSRF? [duplicare]

11

Sto leggendo su CSRF e ho trovato i token di sincronizzazione. Non capisco perché non puoi fare un CSRF per ottenere il token per fare un vero CSRF.

Esempio: bank.com ha una forma come questa in https://bank.com/transfer :

<form action="https://bank.com/do_transfer" method="post">
  <input type="hidden" name="synchroniser_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" >
  <input type="hidden" name="to"                 value="ciro">
  <input type="hidden" name="amount"             value="100">
  <button type="submit">Send 100$ to Ciro.</button>
</form>

Questo codice è stato adattato dal link

Che cosa fermerebbe malicioussite.com da GETing https://bank.com/transfer con JavaScript sul client (utilizzando l'ID di sessione già memorizzato nel cookie) e scartando la pagina per authenticity_token ? Quindi, potrebbero usare quell'ID per fare un CSRF reale , essenzialmente un CSRF per fare un altro CSRF.

Richiede l'esecuzione di JavaScript, quindi sarebbe più difficile fare una semplice immagine di 0px X 0px, ma è più che fattibile.

    
posta Anonymous Penguin 26.07.2015 - 20:10
fonte

1 risposta

18

Ciò che impedisce a un sito dannoso di ottenere il token anti-CSRF è la stessa politica di origine. Lo stesso criterio di origine, o SOP, si trova a livello di browser e definisce dove JavaScript è autorizzato a comunicare.

JavaScript su example.com non può chiamare example.org per ottenere i dati. Inoltre, JavaScript su http://www.example.com/ non può chiamare http://www.example.com:8080/ come la porta differisce. Ci sono ulteriori restrizioni che sono impostate e possono essere trovate qui: link .

Ci sono eccezioni a questo con la condivisione di risorse incrociate, ma questo ha le sue regole che i browser devono seguire. CORS può essere trovato qui: link .

    
risposta data 26.07.2015 - 20:33
fonte

Leggi altre domande sui tag