Ho letto su CSRF e su come il pattern token di sincronizzazione non prevedibile viene utilizzato per impedirlo. Non ho capito bene come funziona.Come fa il token a prevenire l'attacco csrf?
Prendiamo questo scenario:
un utente è connesso in un sito con questo modulo:
<form action="changePassword" method="POST">
<input type="text" name="password"><br>
<input type="hidden" name="token" value='asdjkldssdk22332nkadjf' >
</form>
Il server memorizza anche il token nella sessione. Quando viene inviata la richiesta, confronta il token nei dati del modulo con il token nella sessione.
Come si fa che impediscono CSRF quando l'hacker può scrivere codice JavaScript che:
- Invia una richiesta GET al sito
- Ricevi testo HTML contenente il modulo di richiesta.
- Cerca il testo html per il token CSRF.
- Effettua la richiesta dannosa utilizzando quel token.
Mi manca qualcosa?
Vale la pena notare che è possibile rilasciare una richiesta GET di successo anche tramite iframe, script o tag di oggetto, ma il browser non consente di ottenere il contenuto del documento caricato da JavaScript (protocolli, domini e porte devono corrispondere), – pamelus
grazie per la tua risposta – david
Nel caso in cui qualcuno si chiedesse perché l'attaccante non può semplicemente ottenere alcun vecchio token dal sito e utilizzarlo nella sua richiesta, è perché il token è anche memorizzato come cookie nel browser di cui l'utente malintenzionato non è a conoscenza , quindi quando invia la richiesta con un nuovo token che ha appena ottenuto dal sito non corrisponde a quello sul cookie dell'utente e la richiesta viene eliminata. – T0m