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.