viernes, septiembre 29, 2023

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

Cómo saber la fecha que se modificó un procedimiento almacenado

Poder saber cuales objetos o procedimientos almacenados se modificaron recientemente es muy útil principalmente en bases de datos donde varios desarroladores tienen acceso
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.
SQL Server

Format en SQL Server (Transact-SQL)

La función Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como varchar en un formato específico.

Últimos artículos

SQL Server MERGE

MERGE in SQL Server for Insert, Delete and Update with two tables

Practical example using MERGE to synchronize two tables, Insert, Update and Delete in a single query. Valid for SQL SERVER 2008 or...

Como crear una API REST con ASP.NET Core 6.0

Crear una API REST con C# en ASP.NET es un proceso sencillo y rápido que permite exponer un conjunto de recursos a...
Machine Learning & Python

Introducción a Machine Learning en Python

Machine Learning es una rama de la inteligencia artificial que se enfoca en el desarrollo de sistemas que pueden aprender de...
SQL Server MERGE

MERGE en SQL Server, como utilizarlo de forma sencilla

El comando MERGE en SQL Server se utiliza para combinar datos de varias tablas en una sola tabla. Es útil para actualizar...