"Padding N'est pas valide et ne peut pas être supprimé" exception sur WebResource.axd
J'ai un ASP.NET 2.0 application qui fonctionne bien dans notre environnement local. Lorsqu'il est publié sur un serveur de test, nous obtenons des erreurs intermittentes sur le serveur.
Voici le plus commun:
Le remplissage n'est pas valide et ne peut pas être supprimé. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails De L'Exception: Système.Sécurité.Cryptographie.CryptographicException: le remplissage n'est pas valide et ne peut retiré.
Erreur Source:
Une exception non gérée a été générée pendant l'exécution du courant demande web. Les informations concernant les origine et lieu de l'exception peut être identifié à l'aide de l'exception trace de la pile ci-dessous.
Trace De Pile:
[CryptographicException: le remplissage est non valide et ne peut pas être supprimé.]
Système.Sécurité.Cryptographie.RijndaelManagedTransform.DecryptData (Octet[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] & outputBuffer, Int32 outputOffset, PaddingMode paddingMode, fLast booléen) + 1545747
Système.Sécurité.Cryptographie.RijndaelManagedTransform.TransformFinalBlock (Octet[] inputBuffer, Int32 inputOffset, Int32 inputCount) + 257
Système.Sécurité.Cryptographie.CryptoStream.FlushFinalBlock() +30 Système.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Booléen fEncrypt, Byte [] buf, Byte [] modificateur, Début Int32, Longueur Int32, booléen useValidationSymAlgo) + 164
Système.Web.INTERFACE.Page.DecryptString(Chaîne s) + 83
Système.Web.Manipulateur.AssemblyResourceLoader.Système.Web.IHttpHandler.ProcessRequest(HttpContext contexte) + 148
Système.Web.CallHandlerExecutionStep.Système.Web.HttpApplication.IExecutionStep.Exécuter() +358 Système.Web.HttpApplication.ExecuteStep (IExecutionStep étape, booléen & completedsynchrone) +64
Cela se produit sur une requête à une WebResource spécifique.demande axd.
L'autre erreur que nous voyons est la suivante:
La Validation de viewstate MAC a échoué. Si cette application est hébergée par un site Web Ferme ou cluster, assurez-vous que configuration spécifie la même validationKey et validation algorithme. AutoGenerate ne peut pas être utilisé dans un cluster. Description: Un une exception non gérée s'est produite pendant l'exécution du web actuel demande. Veuillez consulter la trace de pile pour plus d'informations sur l'erreur et d'où il est originaire dans le code.
Détails De L'Exception: Système.Web.HttpException: Validation de viewstate Mac a échoué. Si ce l'application est hébergée par une ferme Web ou cluster, assurez-vous que configuration spécifie le même validationKey et validation algorithme. AutoGenerate ne peut pas être utiliser dans un cluster.
Cette erreur se produit occasionnellement lors de la publication d'un formulaire.
Maintenant, avant de sauter et de me dire la réponse évidente (habituelle) à cette erreur, considérez ceci:
- l'application est déployée sur Windows Server 2003 sur IIS6
- Ce n'est pas sur une batterie de serveurs web. Un seul serveur web est utilisé ici.
- l'identité du pool d'applications est un compte de service personnalisé, et j'ai exécuté
aspnet_regiss -ga <username>
sur le serveur. Pas d'effet.
3 réponses
L'erreur est due au fait que votre appdomain a été recyclé / redémarré. Lorsque cela se produit, l'application et la clé de la machine sont définies sur auto, elles changent. Cela affecte le décryptage des informations dans l'url des ressources URL (.axd). La configuration d'une clé de machine fixe l'empêchera de se reproduire.
Veuillez vérifier ceci pour plus d'informations sur un cas similaire (l'explication est avec un problème avec la validation de viewstate, mais la cause est la même): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx
Je me demandais aussi à ce sujet depuis un bon moment. Après avoir vu cette question, il m'a remis dessus: est-ce une tentative de briser mon ASP.Net sécurité du site? ... ce que je viens de répondre avec la même chose. J'ai eu le sentiment que c'était autour d'un redémarrage de quelque chose, parce que quand nous avons publié quelque chose qui recyclait l'application, l'erreur a montré dans le journal, mais je ne l'ai pas fait avoir une autre source indiquant sa relation (aujourd'hui j'ai trouvé ce cas sur invalidviewstate à cause du changement de machinekey:))
Ps. ci-dessus l'explique enfin sur un seul serveur:)
Ce problème apparaît lorsqu'un message est généré avant le chargement complet de la page dans le navigateur. Jetez un oeil à cette question.
Ben,
Pour votre premier problème, j'ai trouvé cela qui semble être un peu plus au point de ce que vous voyez en ce que le problème se produit sporadiquement. Vous devriez être en mesure de trouver une explication complète à http://www.codeproject.com/KB/security/Cryptor.aspx#aes .
Ce que vous devez vraiment faire est de définir RijndaelAlg.Rembourrage à PaddingMode.ISO10126, PaddingMode.PKCS7, ou PaddingMode.ANSIX923. L'une de ces 3 valeurs devrait fonctionner, à condition que vous utilisiez le même valeur lors du chiffrement et du déchiffrement. D'autres valeurs fonctionneront avec certaines données, mais pas avec toutes les données. L'URL ci-dessus explique pourquoi.
Ce que je ne comprends pas, C'est la raison pour laquelle Microsoft fournit des options qui ne fonctionnent parfois pas, ou du moins pourquoi elles ne sont pas par défaut une option fiable.