viernes, septiembre 17, 2021

Cómo solucionar el error «Validation of ViewState Mac failed» en asp.net

En algún momento nos encontraremos con el error «Validation of ViewState Mac failed«, aquí te mostramos una de las formas de como solucionarlo de una forma muy sencilla modificando nuestro archivo web.config.

Este error puede tener múltiples causas, y en este artículo vamos a explicar la mas común.

¿Que es «View State»?

El estado de la vista es información que se redondea entre las páginas de WebForms (.aspx) en una aplicación ASP.NET. Un ejemplo de un elemento que podría estar almacenado en el campo __VIEWSTATE es el texto de un control Button. Si un usuario hace clic en el botón, el controlador de eventos Button_Click podrá extraer el texto del botón del campo de estado de vista.

Debido a que el campo __VIEWSTATE contiene información importante que se usa para reconstruir la página en la devolución de datos, ASP.NET se asegura de que un atacante no pueda manipular este campo. Para evitar este tipo de ataque de manipulación, el campo __VIEWSTATE está protegido por un código de autenticación de mensaje (MAC). ASP.NET valida el MAC que se envía junto con la carga __VIEWSTATE cuando ocurre una devolución. La clave que se utiliza para calcular el MAC se especifica en el elemento de la aplicación  en el archivo Web.config. Debido a que el atacante no puede adivinar el contenido del elemento <machineKey>, el atacante no puede proporcionar un MAC válido si el atacante intenta manipular la carga útil de __VIEWSTATE. ASP.NET detectará que no se ha proporcionado un MAC válido, y ASP.NET rechazará la solicitud maliciosa.

Posibles causas

  • La validación de viewstate MAC falló. Si esta aplicación está alojada por una granja de servidores web o un clúster, asegúrese de que la configuración de <machineKey> especifique la misma validationKey y el algoritmo de validación. AutoGenerate no se puede utilizar en un clúster.
  • Problema con el Application Pool. Sucede con los sitios que se ejecutan bajo la identidad del grupo de aplicaciones no tienen acceso al registro HKCU.
  • El grupo de aplicaciones se configura utilizando LoadUserProfile = false. Si el grupo de aplicaciones se está ejecutando con una identidad personalizada, es posible que IIS no haya cargado el perfil de usuario para la identidad. Esto tiene el efecto secundario de hacer que el registro HKCU no esté disponible para que ASP.NET persista en la <machineKey> generada automáticamente. Por lo tanto, se creará una nueva clave generada automáticamente cada vez que se reinicie la aplicación.
  • La propiedad Page.ViewStateUserKey tiene un valor incorrecto. Los desarrolladores de software pueden decidir utilizar la   propiedad Page.ViewStateUserKey para agregar la protección de falsificación de solicitud entre sitios al campo __VIEWSTATE. Si usa la   propiedad Page.ViewStateUserKey , normalmente se establece en un valor como el nombre de usuario actual del usuario o el identificador de sesión del usuario. Las plantillas de proyecto para las aplicaciones WebForms en Microsoft Visual Studio 2012 y versiones posteriores contienen ejemplos que utilizan esta propiedad.

El error que se muestra debe ser algo similar a esto:

Server Error in ‘/’ Application.
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Solución más común

Ahora para solucionarlo debes agregar en el archivo web.config la siguiente línea

<system.web> <-- dentro del nodo
<pages enableEventValidation="false" 
        viewStateEncryptionMode ="Never" 
        enableViewStateMac="false" />

Esto debería de solucionarte el problema, que generalmente aparece cuando tenemos nuestro sitio en un hosting compartido o en una granja de servidores.

  • Resolving view state message authentication code (MAC) errors
  • [Solved] Validation of viewstate MAC failed

Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub

Redes Sociales

2,736FansMe gusta
326SeguidoresSeguir

Popular esta semana

SQL Server - Merge

MERGE en SQL Server para Insert, Delete y Update con dos tablas

Ejemplo práctico usando MERGE para sincronizar dos tablas, Insert, Update y Delete en un solo query. Válido para SQL SERVER 2008 o superior.

Calcular la distancia entre dos puntos geográficos en SQL Server

En este ejemplo mostramos como calcular la distancia en metros o kilómetros entre dos puntos geográficos, por latitud y longitud. El resultado lo obtenemos en metros o kilómetros.

DELETE con subconsulta o INNER JOIN

En el siguiente ejemplo se explica la forma en que se pueden eliminar registros en nuestras tablas con instrucciones DELETE más complejas que las...

Últimos artículos

Flutter - Instagram Clone App

Instagram Clone App con Flutter

Marvin Stanley Valenzuela nos comparte un reto y genialidad a la vez, excelente práctica de la que podemos aprender mucho, diseñó en...

¿Cómo agregar una IP adicional en una VM Ubuntu en Azure?

Lo más común al momento de crear y configurar un nuevo servidor es que a este le asigne un solo IP, pero...
flutter one year

Después de un año con Flutter, esto es lo que aprendí

La historia comenzó cuando un día desperté pensando en tener un nuevo proyecto personal. Me dije a mí misma que hay muchas...
promocionar app

Cómo promocionar gratis tu app usando tappx

Como todos los que me siguen y mis redes sociales sabrán, recientemente lancé mi primera aplicación, pero más allá del desafío tecnológico de...