2009-05-18 8 views
3

ASP.NET Webフォームアプリケーションがあります。以下のような検証エラーが生成されることがあります。 これはなぜですか?'CombinedScript'のASP.NET検証エラーですか?

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) 

詳細は:

私はそれが悪質なの要求ですが、このスクリプトリンクのいくつかの不正確な取り扱いが原因ではないと思います。もしそうなら、それをどうやって処理するのですか?

次のスクリプトブロックは、問題のページのために生成されたHTMLソースである:

<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> 

答えて

1

ASP.NETは、クエリ文字列またはフォームフィールドに任意のHTML(潜在的に危険な値の基本的リスト)を許可していませんデフォルトでは値です。これは、@PageディレクティブのValidateRequest属性(デフォルトではtrue)によって設定されます。

この機能をオフにすることはできますが、XSS攻撃まで開くことができます。より良い方法は、すべてのクエリーストリングが適切にURLエンコードされていることを確認することです。

あなたの場合、問題の原因となっている</div>タグが表示されます。このクエリー文字列がJavascriptで作成されている場合は、encodeURIComponent()関数を使用して値をエンコードすることをお勧めします。

+0

ありがとうございました。スクリプトブロックは、ASP.NETフレームワークコントロールまたはAjaxControlToolkitコントロールによって生成されると思います。私はそれを制御する方法を知らない... –