2009-03-06 4 views
9

Je suis assez nouveau à ASP.NET. J'ai récemment mis en place un courriel automatisé à partir de mon site Web pour me signaler une exception non gérée. Il y a quelques heures à peine, il y avait 10 exceptions non gérées et toutes les traces de pile étaient similaires. Il y a beaucoup de messages d'erreur que je ne comprends pas, mais je n'aime pas la façon dont cela se présente.Est-ce une tentative pour briser la sécurité de mon site ASP.Net?

Voici un des messages e-mail:

An unhandled exception occurred: 
Message: Padding is invalid and cannot be removed. 

Stack Trace: 
    at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) 
    at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) 
    at System.Security.Cryptography.CryptoStream.FlushFinalBlock() 
    at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo) 
    at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) 
    at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Est-ce une tentative de pirater mon site ou autre chose? Merci beaucoup à ceux qui ont fourni des réponses et des commentaires qui m'ont orienté dans la bonne direction pour obtenir une réponse à cette exception. Sa cause peut être difficile à déterminer, surtout lorsqu'il ne se produit pas dans une ferme Web.

IE 5.5 ne causait pas le problème comme je le pensais précédemment.

Il n'a pas été facilement trouvé, mais un message sur mon forum hôte par l'un des membres du personnel mentionné des rapports d'erreurs Viewstate. La cause a été attribuée au processus de travail ASP ou au recyclage du serveur.

Les paramètres du processus de travail ASP font référence à l'élément processModel dans le fichier machine.config. Voir http://msdn.microsoft.com/en-us/library/7w2sway1(VS.80).aspx pour plus d'informations.

La solution recommandée consistait à définir une machineKey cryptée dans le fichier web.config. Le nœud Machine Key se trouve dans l'élément system.web.

Cela a été fait facilement et a résolu le problème grâce au site ASP.NETResources pratique qui a un Générateur MachineKey. Voir http://www.aspnetresources.com/tools/keycreator.aspx.

Répondre

8

Cette exception est levée lorsque le gestionnaire de ressources d'assembly reçoit une requête non valide. Il est peu probable que cela soit lié à une activité malveillante. Il est généralement causé par une configuration incorrecte de la machine sur le serveur.

Un peu d'histoire:

ASP.NET a intégré des mécanismes d'exposition de l'ensemble des ressources (dll) par l'intermédiaire d'un HttpHandler. Des ressources telles que JavaScripts et des images peuvent être stockées sous forme de texte dans l'assembly et demandées par le navigateur via les gestionnaires .axd. Mais pour des raisons de sécurité, les gestionnaires n'acceptent pas l'emplacement en texte brut de la ressource, ce qui pourrait révéler des indices sur le fonctionnement de votre code. Au lieu de cela, il utilise des informations dans le fichier machine.config sur le serveur pour chiffrer un identifiant unique à la ressource. Cette exception est levée lorsqu'une ressource est demandée, mais lorsque le serveur tente de décrypter l'identificateur fourni, il échoue.

+0

Nous vous remercions de votre réponse rapide et informative. Y a-t-il quelque chose que je dois faire pour empêcher que cette exception ne se reproduise? De plus, je connais les bases de l'essai, de la capture, enfin, mais je sais très peu de choses sur la gestion des exceptions spefic. – PatrickWood

+0

@hunterpaw L'observateur d'événements du serveur doit avoir l'URL spécifique à l'origine de l'erreur. Cela devrait ressembler à /WebResource.axd?d={gibberish}. Si oui, lisez sur le paramètre machineKey pour vérifier le vôtre est correct: http://msdn.microsoft.com/en-us/library/ms998288.aspx –

+0

Pourquoi cela a-t-il été rejeté? Est-ce faux? –

2

L'erreur est 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, cela change. Cela affecte le décryptage de l'info dans l'url des ressources urls (.axd). La configuration d'une clé machine fixe l'empêchera de se reproduire.

S'il vous plaît vérifier cela pour plus d'informations sur un cas similaire (l'explication est avec un problème avec la validation viewstate, mais la cause est la même): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx

Ps. ceci explique cela sur des déploiements de serveur unique :) - bien que la solution soit la même pour les deux serveurs multi-single, le correctif était généralement expliqué uniquement pour que tous les serveurs utilisent la même clé machine.

Mise à jour 1: Le message de remplissage n'est pas valide et n'a pas de relation avec le remplissage CSS. Si cela ne se passe que sur 5.5, il est probable que les paramètres de webresource.axd sont en train d'être bousillés, comme dans cette question: Invalid Webresource.axd parameters being generated.

+0

Merci, Freddy, pour l'explication et le lien. Tu m'as aidé à mieux le comprendre. – PatrickWood