Trabajé en una aplicación asp.net que fue sometida a una auditoría de seguridad por parte de una empresa de seguridad líder y aprendí este sencillo truco para evitar una vulnerabilidad de seguridad menos conocida pero importante.
La explicación a continuación es de:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Considere usar Page.ViewStateUserKey para contrarrestar los ataques de un clic. Si autentica a las personas que llaman y usa ViewState, configure la propiedad Page.ViewStateUserKey en el controlador de eventos Page_Init para evitar ataques con un solo clic.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Establezca la propiedad en un valor que sepa que es único para cada usuario, como un ID de sesión, nombre de usuario o identificador de usuario.
Un ataque de un clic ocurre cuando un atacante crea una página web (.htm o .aspx) que contiene un campo de formulario oculto llamado __VIEWSTATE que ya está lleno de datos ViewState. ViewState se puede generar a partir de una página que el atacante había creado previamente, como una página de carrito de compras con 100 artículos. El atacante atrae a un usuario desprevenido a navegar a la página, y luego el atacante hace que la página se envíe al servidor donde el ViewState es válido. El servidor no tiene forma de saber que ViewState se originó en el atacante. La validación de ViewState y los HMAC no contrarrestan este ataque porque ViewState es válido y la página se ejecuta bajo el contexto de seguridad del usuario.
Al establecer la propiedad ViewStateUserKey, cuando el atacante navega por una página para crear ViewState, la propiedad se inicializa con su nombre. Cuando el usuario legítimo envía la página al servidor, se inicializa con el nombre del atacante. Como resultado, la verificación ViewState HMAC falla y se genera una excepción.