2009-05-18 2 views
3

Nous avons une application de formulaires Web ASP.NET qui génère parfois une erreur de validation comme ci-dessous. Quelle peut être la raison de cela?Erreur de validation ASP.NET dans 'CombinedScript'?

A validation error has occurred. 

Exception type: System.Web.HttpRequestValidationException 

Exception message: A potentially dangerous Request.QueryString value 
    was detected from the client 
    (_TSM_CombinedScripts_="...   </div>    ..."). 

Request URL: https://...:443/Default.aspx?_TSM_HiddenField_= 
    ctl00_sm1_HiddenField&_TSM_CombinedScripts_= 
    %3b%3bAjaxControlToolkit%2c+Version%3d3.5.11119.20050%2c 
    +Culture%3dneutral%2c 
    +PublicKeyToken%3d28f01b0e8%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20 
    %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20 
    </div>%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<div%20class= 

Stack trace: at System.Web.HttpRequest.ValidateString(String s, String valueName, String collectionName) 
    at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, String collectionName) 
    at System.Web.HttpRequest.get_QueryString() 
    at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 
    at System.Web.UI.Page.DeterminePostBackMode() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at ASP.user_default_aspx.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Plus de détails:

Je ne pense pas que ce soit une demande « malveillant », mais est due à une mauvaise manipulation de ce lien de script. Si oui, comment gérer cela?

Le bloc de script suivant est la source html générée pour la page en question:

<script src="/Default.aspx?_TSM_HiddenField_= 
ctl00_sm1_HiddenField&_TSM_CombinedScripts_= 
%3b%3bAjaxControlToolkit%2c+Version%3d3.5.11119.20050%2c 
+Culture%3dneutral%2c 
+PublicKeyToken%3d28f01c0e84b6d53e%3aen%3a7e147239-dd05-47b0-7fb3- 
f743a139f982%3be2e86bf9%3a1aa13a87%3a8ccd9c1b%3a9ea3f0e2%3a9e7e87e9 
%3a4c9865be%3aba594826%3ac4c00916%3a630bb7c2%3af442e939" 
type="text/javascript"></script> 

Répondre

1

ASP.NET ne permet pas de HTML (essentiellement une liste de valeurs potentiellement dangereuses) dans un champ Querystring ou formulaire valeur par défaut. Ceci est défini par l'attribut de directive @Page ValidateRequest (true par défaut).

Vous pouvez désactiver cette fonction, mais il vous ouvrir aux attaques XSS. La meilleure méthode consiste à s'assurer que tous vos Querystrings sont correctement codés en URL.

Dans votre cas, il semble être la balise </div> qui est l'origine du problème. Si ce querystring est créé via Javascript, je suggère l'utilisation de la fonction encodeURIComponent() pour encoder des valeurs.

+0

Merci. Je suppose que le bloc de script est généré par un contrôle d'infrastructure ASP.NET ou un contrôle AjaxControlToolkit. Je ne sais pas comment contrôler ça ... –