Abbiamo un sito Web che utilizza MVC3 e un metodo di autenticazione personalizzato che non si basa affatto sull'autenticazione dei moduli, almeno da quello che posso dire. Nel web.config abbiamo impostatoAntiForgeryToken senza autenticazione moduli
<authentication mode="None"></authentication>
e non usiamo mai/set HttpContext.User ovunque nel codice. Il problema è quando si utilizza @ Html.AntiForgeryToken() in alcuni casi, l'utente riceve questo messaggio di errore:
A required anti-forgery token was not supplied or was invalid
Centralizziamo tutti i controlli anti-contraffazione in OnAuthorization con questo codice:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
Questo è dove si verifica l'eccezione. Abbiamo defined a machineKey in web.config per impedire la generazione di nuove chiavi durante il riciclo del pool di applicazioni. Questo non risolve il problema.
Successivamente abbiamo pensato che forse il browser del cliente non sta inviando i cookie. Abbiamo iniziato a registrare i cookie e abbiamo notato che in alcuni casi viene inviato il cookie RequestVerificationToken_Lw, ma in altri non lo è, anche se altri cookie, come quelli creati da Google Analytics, vengono inviati correttamente. Potrebbe esserci qualcosa nel browser che sta eliminando alcuni cookie e lasciandone altri?
Sembra lo anti-forgery token depends on forms authentication. È questo il caso? Un modo per continuare a utilizzare AntiForgeryToken quando non si utilizza l'autenticazione dei moduli in modo affidabile. Tieni presente che il metodo descritto sopra funziona per oltre il 90% dei casi, ma non possiamo individuare perché non funziona per alcune persone.
Pensieri?
Grazie!
Perché preoccuparsi dei token anti contraffazione se non si utilizza alcuna autenticazione? Lo scopo di un attacco CSRF è che un utente malintenzionato esegua azioni per conto di un utente autenticato su un sito. E se un sito non usa l'autenticazione CSRF sembra privo di scopo. –
Sto usando l'autenticazione, non solo l'autenticazione dei moduli. – pbz
che tipo di autenticazione stai usando? –