jueves, agosto 22, 2019

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.NETUn 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:

[quote arrow=»yes»]

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.

[/quote]

Solución más común

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

<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,795FansMe gusta
342SeguidoresSeguir

Popular esta semana

ERROR PHP 7.2

Error: PHP Warning: count(): Parameter must be an array or an object that implements...

Como solucionar el error "PHP Warning: count() : Parameter must be an array or an object that implements Countable in..."

SQL Server: Error 3414, servicio no inicia

El error 3414 se produce generalmente cuando el motor de la base de datos SQL Server sufre algún evento imprevisto. Aquí lo solucionamos.

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

Factura Electrónica Costa Rica

Encabezados del XML Factura Electrónica Costa Rica 4.3

Para generar el XML de la factura electrónica de Costa Rica se debe de seguir un formato específico para que estas sean...
C# - PDF417

Crear código PDF417 con iTextSharp y XZing en C# .NET

Para crear códigos PDF417 existen herramientas que podemos agregar a nuestra aplicaciones. En este ejemplo vamos explicar como utilizar iTextSharp y ZXing.

SQL Server: Error 3414, servicio no inicia

El error 3414 se produce generalmente cuando el motor de la base de datos SQL Server sufre algún evento imprevisto. Aquí lo solucionamos.
C# String Base64

Convertir String a Base64

Hemos tenido algunas consultas en estos días de cómo convertir Texto String a Base64 y viceversa, ahora por el tema de "Factura Electrónica", entonces decidimos hacer este pequeño ejemplo.