asp.net - La excepción "Padding no es válida y no se puede eliminar" en WebResource.axd
viewstate (3)
Tengo una aplicación ASP.NET 2.0 que funciona bien en nuestro entorno local. Cuando se publica en un servidor de prueba, recibimos errores intermitentes en el servidor.
Aquí está el más común:
El relleno no es válido y no se puede eliminar. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción: System.Security.Cryptography.CryptographicException: el relleno no es válido y no se puede eliminar.
Error de fuente:
Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de pila de excepción a continuación.
Stack Trace:
[CryptographicException: el relleno no es válido y no se puede eliminar.]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData (Byte [] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] y outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (Byte [] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock () +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData (Boolean fEncrypt, Byte [] buf, Byte [] modificador, Int32 start, Int32 length, Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString (String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest (HttpContext context) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +358 System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completado sincrónicamente) +64
Esto ocurre cuando se solicita una solicitud WebResource.axd específica.
El otro error que estamos viendo es esto:
La validación de viewstate MAC falló. Si esta aplicación está alojada en una Web Farm o clúster, asegúrese de que la configuración especifique la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede usar en un clúster. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción: System.Web.HttpException: la validación de viewstate MAC falló. Si esta aplicación está alojada en una Web Farm o clúster, asegúrese de que la configuración especifique la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede usar en un clúster.
Este error ocurre ocasionalmente mientras se publica un formulario.
Ahora, antes de saltar y decirme la respuesta obvia (habitual) a este error, considere esto:
- La aplicación se implementa en Windows Server 2003 en IIS6
- NO está en una granja de servidores web. Solo un servidor web está en uso aquí.
- La identidad del grupo de aplicaciones es una cuenta de servicio personalizada, y
aspnet_regiss -ga <username>
en el servidor. Sin efecto.
Ben,
Para su primer problema, encontré esto que parece ser un poco más al punto de lo que está viendo en que el problema se produce esporádicamente. Debería poder encontrar una explicación completa de esto en http://www.codeproject.com/KB/security/Cryptor.aspx#aes .
Lo que realmente debe hacer es configurar RijndaelAlg.Padding en PaddingMode.ISO10126, PaddingMode.PKCS7 o PaddingMode.ANSIX923. Cualquiera de estos 3 valores debería funcionar, siempre que use el mismo valor al cifrar y descifrar. Otros valores funcionarán con algunos datos, pero no con todos los datos. La URL anterior explica por qué.
Lo que no entiendo es la razón por la cual Microsoft proporciona opciones que a veces no funcionan, o al menos por qué no se convierten en una opción confiable.
El error se debe a que su dominio de aplicación fue reciclado / reiniciado. Cuando eso sucede, la aplicación y la clave del equipo se configuran en automático, cambia. Eso afecta el descifrado de la información en la url de los recursos urls (.axd). Configurar una clave de máquina fija evitará que vuelva a suceder.
Verifique esto para obtener más información sobre un caso similar (la explicación es sobre un problema con la validación de viewstate, pero la causa es la misma): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+ Validar + Datos + Error.aspx
También me he estado preguntando por bastante tiempo. Después de ver esta pregunta, volví a ponerme en ella: ¿se trata de un intento de romper la seguridad de mi sitio ASP.Net? ... que acabo de responder con casi lo mismo. Tenía la sensación de que estaba a punto de reiniciar algo, porque cuando publicamos algo que reciclaba la aplicación, el error aparecía en el registro, pero no tenía otra fuente que indicara su relación (hoy encontré ese caso en invalidviewstate debido a el cambio de tecla de máquina :))
PD. arriba finalmente lo explica en un solo servidor :)
Este problema aparece cuando se genera una publicación antes de que la página esté completamente cargada en el navegador. Eche un vistazo a esta pregunta.