sábado, abril 20, 2024

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 Rojas
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
Roy Rojas
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