2015-01-14 8 views
9

Sto implementando la protezione anti-contraffazione CSRF nella mia applicazione ASP.NET MVC 5. In particolare, sto facendo riferimento all'approccio descritto da Mike Wasson sullo ASP.NET website per proteggere i metodi del controller che rispondono alle richieste AJAX, come nei controller WebAPI. Questo approccio utilizza il metodo AntiForgery.GetTokens per generare token anti-contraffazione crittografici basati sugli utenti e quindi AntiForgery.Validate per verificare che i token inviati appartengano all'utente corrente.I token anti-contraffazione ASP.NET MVC CSRF scadono?

La mia domanda è questa: c'è un time-to-live per questi token? Scadono e, in caso affermativo, per quanto tempo servono? La documentazione è muta sull'argomento.

Non voglio permettere token non in scadenza nel mio sistema. Inoltre, voglio comunicare al client quanto tempo hanno prima di richiedere un nuovo token è necessario. Posso implementare i token in scadenza, se necessario, usando FormsAuthentication.Encrypt; tuttavia, se la scadenza è già incorporata nei metodi della classe AntiForgery, allora mi piacerebbe risparmiarmi la complessità non necessaria.

+1

vorrei sapere anche questo. Prova a guardare il codice sorgente: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.WebPages/Helpers/AntiForgery.cs – nmit026

risposta

3

L'idea è che due token vengono generati da ogni POST HTTP vulnerabile e inviati direttamente al server. Pertanto, se si fa clic sul pulsante "Invia" in un modulo, vengono generati due token: un cookie e un valore del modulo, entrambi basati sulle credenziali dell'utente, da leggere qui (articolo scritto piacevole): http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

il token cookie, che in realtà può scadere, è ridondante e non è necessario per il sistema tranne nel caso in cui venga tentata un'autenticazione anonima. Per esempio. vedi qui (prima risposta): MVC 2 AntiForgeryToken - Why symmetric encryption + IPrinciple?

Ancora, l'altro token non è leggibile per gli attaccanti e questi token vengono generati con ogni nuova richiesta. Pertanto, non è necessario preoccuparsi della data di scadenza.

Edit: In realtà, tutto questo può anche essere letta nella sezione commenti di questo articolo si fa riferimento (Mike Wasson);)

+7

Grazie per la risposta. Comprendo i concetti di come funzionano i due token e comprendiamo i sottili ma diversi approcci per i moduli HTML rispetto alle richieste AJAX. La mia domanda, tuttavia, è specificamente se i token scadono, cosa che non è discussa nella documentazione o nei commenti del post di Mike Wasson. Saluti! – kbrimington

+1

@kbrimington Il [primo articolo sopra] (https://docs.microsoft.com/en-us/aspnet/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages) nel La sezione IAntiForgeryAdditionalDataProvider verso la parte inferiore della pagina sembra implicare che non ha una scadenza. Dice che POTREBBE implementare ulteriori controlli e afferma "La routine di validazione potrebbe implementare un timeout (controllando l'ora corrente rispetto al tempo che è stato memorizzato quando è stato creato il token), una routine di non controllo o qualsiasi altra logica desiderata." Hai mai ricevuto una risposta definitiva sulla scadenza del token? –

+1

@DavidYates, grazie per averlo portato alla mia attenzione. All'epoca, ho concluso che non devono scadere e ho costruito la mia logica di scadenza. Non ricordo che questa sezione sia presente nell'articolo 2,5 anni fa quando ho posto la mia domanda. Sembra essere l'intento di "IAntiForgeryAdditionalDataProvider' per consentire una facile personalizzazione del token e la sua logica di convalida, inclusa la possibilità di implementare i timeout. – kbrimington