¿Impedir CSRF utilizando ViewState?

1

Según OWASP puede evitar CSRF en una aplicación ASP.NET si incluye el SessionID en el ViewState. Del artículo:

  

Viewstate se puede usar como una defensa CSRF, ya que es difícil para un   atacante para forjar un Viewstate válido. No es imposible forjar un   Viewstate válido ya que es factible que los valores de los parámetros puedan ser   Obtenido o adivinado por el atacante. Sin embargo, si la sesión actual   La ID se agrega a ViewState, luego hace que cada Viewstate sea único, y   por lo tanto inmune a CSRF.

¿Es necesario incluir el SessionID incluso si está utilizando ViewState cifrado? ¿Cómo podría un usuario malintencionado generar un ViewState cifrado válido?

    
pregunta Abe Miessler 22.04.2014 - 01:33
fuente

1 respuesta

1
  

¿Es necesario incluir el SessionID incluso si está utilizando ViewState cifrado? ¿Cómo podría un usuario malintencionado generar un ViewState cifrado válido?

Un usuario malintencionado podría generar un ViewState válido y encriptado visitando la página en cuestión y extrayendo el valor. Si el ID de sesión no forma parte del valor de ViewState, este valor será válido para todas las sesiones.

Esto también se menciona en la página de Microsoft Estado de la vista de seguridad : -

  

Codificación de estado de vista por usuario

     

Si su sitio web autentica a los usuarios, puede configurar ViewStateUserKey en el controlador de eventos Page_Init para asociar el estado de vista de la página con un usuario específico. Esto ayuda a evitar ataques con un solo clic, en los que un usuario malintencionado crea una página web precargada válida con un estado de vista desde una página creada anteriormente. El atacante atrae a la víctima para que haga clic en un enlace que envía la página al servidor utilizando la identidad de la víctima.

     

Cuando se establece la propiedad ViewStateUserKey , la identidad del atacante se usa para crear el hash del estado de vista de la página original. Cuando la víctima es atraída para reenviar la página, los valores de hash serán diferentes porque las claves de usuario son diferentes. La página fallará la verificación y se lanzará una excepción.

     

Debe la propiedad ViewStateUserKey a un valor único para cada usuario, como el nombre de usuario o el identificador.

    
respondido por el SilverlightFox 22.04.2014 - 14:51
fuente

Lea otras preguntas en las etiquetas