ASP.NET 4.0 設定 了 validateRequest="false" 仍然會出現 具有潛在危險 Request.QueryString 的錯誤訊息

摘要:ASP.NET 4.0 設定 了 validateRequest="false" 仍然會出現 具有潛在危險Request.QueryString的錯誤訊息

微軟的asp.net網頁都會預設進行Request Validation,但若是想規避這樣的內建行為。(建議仍要有其他的方法來防範XSS攻擊)

 

通常我們可以在.aspx中的Page Tag設定:

 <@Page Language="C#" validateRequest="False" >

或是直接對整個站台設定Web.Config中  <system.web>下設定全域的

<pages validateRequest="false" />

 

 

不過,假如你現在在ASP.NET 4.0 的環境下的話,就算進行上述的設定,可能仍會出現驗證失敗的訊息(潛在危險Request.QueryString的錯誤訊息)

因為ASP.NET4.0與2.0版本在請求驗證的定義上已經有所不同:

 

ASP.NET Request Validation

請求驗證是ASP.NET提供來保護XSS攻擊的一項功能

在先前的ASP.NET(ASP.NET 2.0)網頁,都是預設會進行網頁請求的請求驗證

僅會針對.aspx以及他們的class檔案進行驗證

不過到了ASP.NET 4.0,請求驗證範圍擴大到所有的請求

因為從BeginRequest階段就開始了HttpRequest

因此在這個期間任何的資源要求都會進行請求驗證

而非網頁檔案(.aspx)而已,還包含WebService呼叫以及自訂的http Handlers,都會去驗證http請求的內容

因此在ASP.NET 4.0下,可能在非網頁請求的情況下,仍會發生請求驗證錯誤的訊息

這時為了避免這樣的問題,一樣在Web.Config中 <system.web>下加入下列語句

<httpRuntime requestValidationMode="2.0" />

這樣就可以讓請求驗證只焦點在.aspx網頁上了。

 

其他關於ASP.NET 4.0 請求驗證的應用方法:Jimmy的部落格