Se si attiva ViewStateUserKey, il server proteggerà l'integrità dello stato di visualizzazione aggiungendo un checksum casuale e non diagnosticabile. Questo checksum funziona come un token CSRF casuale.
In particolare, ViewStateUserKey calcolerà un Message Authentication Code (MAC) sui campi dello stato di visualizzazione. Un MAC è come un checksum con chiave dei dati, in cui la chiave è nota solo al server. Poiché l'utente malintenzionato non conosce la chiave, l'utente malintenzionato non può generare un checksum valido (digest MAC) per alcuni altri valori dei parametri dello stato di visualizzazione.
Se si utilizza ViewStateUserKey, la chiave utilizzata è specifica per l'utente specifico. Ciò significa che un malintenzionato Mandy non può apprendere un valore valido del digest MAC per l'utente Bob. Mandy non può indovinarlo, perché un algoritmo MAC è progettato per impedire di indovinare il digest MAC. Mandy non può apprenderlo contattando il server, perché se si connette al server, il server utilizzerà la sua chiave di crittografia, non la chiave di Bob, quindi il digest MAC inviato a Mandy non sarà correlato a quello utilizzato per Bob.
In effetti, il digest MAC agisce come una stringa casuale a 128 bit che l'utente malintenzionato non può indovinare. Questo è ciò che impedisce CSRF. Le difese CSRF standard prevedono l'inclusione di una stringa casuale nei parametri di richiesta (casuali, in modo che l'attaccante non possa prevederlo). Con un ViewStateUserKey, il digest MAC agisce come quella stringa casuale.
Vedi anche Microsoft su Securing View State
e ASP.NET Viewstate impedisce implicitamente gli attacchi CSRF? Che cosa significa questo per MVC? .