Quale metodo per generare token CSRF dovrei usare nel mio scenario?

2

Sto lavorando su un'API RESTful per lavorare con la mia applicazione AngularJS.

L'autenticazione funziona generando un ASP.NET FormsAuthenticationTicket. È memorizzato in un cookie utilizzando FormsAuthentication.Encrypt . Questo approccio potrebbe comportare il furto del cookie di autenticazione, tuttavia il problema non rientra nell'ambito di questa domanda.

La domanda riguarda la generazione di un token CSRF. Voglio generare il token basato sul cookie di autenticazione, in questo modo quando l'utente si disconnette (o esegue il logout e il back-in) il token verrà invalidato. Il problema con la generazione di un token per ogni modulo è che il modulo potrebbe scadere prima della scadenza dell'autenticazione. Voglio che i moduli rimangano validi fino a quando l'utente ha effettuato l'accesso.

Se il cookie di autenticazione viene dirottato, tutta la sicurezza viene comunque persa. Per questo motivo non vedo alcun rischio aggiuntivo per il token CSRF relativo al cookie di autenticazione. Il token verrà inviato al client come cookie e al server come intestazione.

Inoltre controllerò le intestazioni di referer / origin, ma questo è fuori dall'ambito di questa domanda.

Alcuni esempi:

# URL that doesn't require authentication
GET /api/security/session HTTP/1.1
HOST localhost:1234

HTTP/1.1 200 OK
Set-Cookie: .ASPXAUTH=SomeLongHexCodeHere; Expires=...; HttpOnly
Set-Cookie: CSRF-Token=TheToken; Expires=...;

# URL that does require authentication
GET /api/account/data
HOST localhost:1234
X-CSRF-Token: TheToken

Per generare il token CSRF stavo pensando di generare un hash salato dal cookie .ASPXAUTH. Basterebbe questo nella protezione contro CSRF, supponendo che XSS sia bloccato e il cookie di autenticazione non sia dirottato?

Due note finali. Sebbene il mio codice venga eseguito sulla piattaforma ASP.NET, non utilizza alcuna delle tecnologie ASP.NET (WebForms, WCF, MVC, WebAPI, ecc.) E non può utilizzare i loro metodi di protezione CSRF. In secondo luogo, il sito non utilizza SSL e purtroppo non utilizzerà SSL. Sarà vulnerabile agli attacchi MITM e non c'è molto che possa fare al riguardo.

    
posta Aidiakapi 05.12.2013 - 22:50
fonte

1 risposta

2

For generating the CSRF Token I was thinking about generating a salted hash from the .ASPXAUTH cookie. Would this suffice in the protection against CSRF, assuming XSS is blocked and the authentication cookie isn't hijacked?

La risposta è sì, è sufficiente, assumendo che tu abbia contrassegnato il cookie ASPXAUTH come HttpOnly.

Il token deve essere un valore difficile da indovinare che il server può correlare con il cookie di sessione. Un hash del cookie funziona abbastanza bene. Poiché è HttpOnly, gli script in esecuzione sul browser non saranno in grado di leggerlo e non saranno in grado di forgiare l'hash.

    
risposta data 06.12.2013 - 02:08
fonte

Leggi altre domande sui tag