Generazione e convalida del token CSRF

0

Sto cercando di implementare le best practice XSS su un sito che sto creando.

Attualmente sto generando un token sicuro sul mio server e lo invio all'utente come campo nascosto di un modulo, quindi convalido quel token verificando che non sia scaduto e che corrisponda a ciò che è sul database.

Mi chiedevo cosa impedisse a un utente malintenzionato di generare il proprio token. Quindi ipoteticamente, se qualcuno avesse semplicemente il suo server generare un nuovo token ogni volta che qualcuno avrebbe cliccato su uno dei suoi link malevoli che avrebbe aggirato la mia convalida CSRF.

Quindi ho iniziato a richiedere che l'IP del client fosse archiviato e controllato durante la convalida. Ma questo non sarebbe sicuro se il nostro attaccante e la vittima si trovassero sulla stessa rete come un hotspot WiFi pubblico.

Il mio tentativo di soluzione: posizionare un cookie sul browser di ogni utente e cancellarne il token con il valore del cookie in modo da essere sicuro che non si tratta di un attacco XSS.

La domanda: mi stavo chiedendo quali sono le migliori pratiche per garantire che il token sia stato originariamente generato dall'utente desiderato, inoltre sono paranoico riguardo a questo?

    
posta Mohammad Ali 09.07.2016 - 02:04
fonte

1 risposta

2

Credo che tu stia mescolando alcune minacce diverse e attacchi i vettori qui.

Minaccia: MITM sniffing o impostazione di token

Posizione: Wi-Fi pubblico

Come attenuare: utilizzare HTTPS in modo che la connessione sia protetta tramite TLS / SSL. Inoltre, è consigliata la Bandiera sicura dei cookie e una politica HSTS con precarico.

Minaccia: XSS

Posizione: su Internet

Che cos'è: un utente malintenzionato che inserisce il codice JavaScript nella pagina, invitando la vittima a visitare un URL per un attacco "riflesso XSS" o memorizzando uno script nel database del sistema che non è codificato correttamente sull'output per un attacco "memorizzato XSS". Quando viene eseguito il payload di attacco, proviene dal browser e dall'IP della vittima.

Come mitigare: codifica corretta dei valori di output, implementa un criterio di sicurezza del contenuto, imposta X-XSS-Protection e X-Content-Type-Options intestazioni HTTP, imposta il flag HttpOnly sui cookie.

Minaccia: CSRF

Posizione: su Internet

Che cos'è: l'autore dell'attacco che attira la vittima a visitare il sito dell'attaccante o un sito compromesso dall'attaccante che inoltra una richiesta dannosa a un sito valido a cui è inoltre collegata la vittima. Quando viene eseguito il payload di attacco, proviene dal browser e dall'IP della vittima.

Come mitigare: genera un token casuale per sessione che viene passato al di fuori del meccanismo del cookie (alias Pattern token di sincronizzazione ).

I tuoi punti

I was wondering what prevents an attacker from generating his/her own token

Nulla - tuttavia, se il token è stato associato alla sessione utente, l'accesso di Mario non può utilizzare il token CSRF di Alice e viceversa. Pertanto, qualsiasi attaccante non sarà in grado di utilizzare il proprio token in un attacco CSRF. Una buona posizione di archiviazione è il meccanismo di sessione lato server fornito da molti framework Web.

Then I began requiring the clients IP to also be stored and checked during validation. But this would not be secure if our attacker and victim were on the same network such as a public WiFi hotspot.

Un attacco CSRF proviene dal browser della vittima. Pertanto, l'indirizzo IP sarà uguale al resto della sessione della vittima. Leggendo il tuo paragrafo di nuovo, ora mi rendo conto che potresti non aver fatto riferimento a una situazione Man-In-The-Middle come ho descritto sopra, tuttavia l'ho lasciato per completezza.

My attempt at a solution: To place a cookie on every user's browser and to hash their token with the cookie's value so that I can be sure that it is not an XSS attack.

XSS è un tipo diverso di attacco. Se si dispone di una vulnerabilità XSS, la maggior parte dei meccanismi di protezione CSRF è inutile o gravemente compromessa.

Il meccanismo che descrivi sembra essere il Pattern token crittografato che è anche un modo valido per mitigare CSRF.

    
risposta data 09.07.2016 - 10:22
fonte

Leggi altre domande sui tag