2011-08-25 7 views
7

Ho appena eseguito un test rapido con un semplice esempio di ASP.NET MVC 3 modificando il modulo LogOn predefinito. Secondo this article, entrambi i campi nascosti __RequestVerificationToken e i cookie __RequestVerificationToken_Lw__ devono contenere lo stesso valore generato da Html.AntiForgeryToken(). Ma non è esattamente lo stesso quando li ho presi in Fiddle, a proposito, guardando il codice sorgente di MVC 3, il metodo GetAntiForgeryTokenAndSetCookie sembrava non utilizzare il valore di sale per generare i cookie. C'è stato qualche cambiamento in MVC 3?Perché il campo nascosto di AntiForgeryToken non è uguale ai cookie sulla mia macchina?

Ho dimenticato di poter accedere correttamente alla richiesta POST sia normale che Ajax.

Ecco di log in da Fiddle:

POST http://localhost:51713/Account/LogOn HTTP/1.1 
Referer: http://localhost:51713/Account/LogOn 
Content-Length: 256 
Origin: http://localhost:51713 
X-Requested-With: XMLHttpRequest 
Content-Type: application/x-www-form-urlencoded 
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA= 

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false 
+1

Come sidenote: i token AntiForgery sono progettati per essere utilizzati per parti non pubbliche dell'applicazione (dove l'utente è già autenticato). Usarli su un modulo di accesso pubblico è praticamente inutile. –

+0

Il modulo LogOn è stato appena utilizzato a scopo di test. –

risposta

2

Cosa ti fa pensare che dovrebbe essere lo stesso? :) ovviamente, devono essere comparabili in qualche modo, ma ciò non significa che debbano apparire identici nella loro forma serializzata. C'è un diverso set di dati serializzati sul cookie (penso solo al "sale" e al token) e al markup HTML (sale, token, tempo di creazione, username).

Se siete interessati ai dettagli, prendere ILSpy e cercare System.Web.Mvc.AntiForgeryDataSerializer, System.Web.Mvc.AntiForgeryData e OnAuthorization metodo System.Web.Mvc.ValidateAntiForgeryTokenAttribute

+0

Grazie, l'articolo citato dice che sono uguali :), e anche il loro nome è lo stesso. –

+0

Nessuna necessità di ILSpy, ASP.NET Mvc è open-source. http://aspnetwebstack.codeplex.com/SourceControl/latest – haim770

1

L'articolo si fa riferimento nella sua domanda è semplicemente sbagliato, perché il campo nascosto di anti contraffazione di token non sarà mai lo stesso valore del cookie anti contraffazione.

Il valore aggiunto della mia risposta è lo link to interesting article che descrive gli interni dei token anti-contraffazione di ASP.NET. E, tra l'altro, prevede misure chiare per decodificare e decifrare cookie/forma di token:

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue)) 

... e fasi successive al fine di corrispondere i gettoni cookie e di forma.

Problemi correlati