【轉】“從客戶端(ctl00$Content$txtContent)中檢測到有潛在危險的 Request.Form 值”之解


轉載自 sucheng1031
最終編輯 hybingo


“/WebSite”應用程序中的服務器錯誤。從客戶端(ctl00$Content$txtContent="木木木木木木木<br />
")中檢測到有潛在危險的 Request.Form 值。
說明: 請求驗證過程檢測到有潛在危險的客戶端輸入值,對請求的處理已經中止。該值可能指示存在危及應用程序安全的嘗試,如跨站點腳本攻擊。若要允許頁面重寫應用程序請求驗證設置,請將 httpRuntime 配置節中的 requestValidationMode 特性設置為 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。設置此值后,可通過在 Page 指令或 <pages> 配置節中設置 validateRequest="false" 禁用請求驗證。但是,在這種情況下,強烈建議應用程序顯式檢查所有輸入。有關更多信息,請參見 http://go.microsoft.com/fwlink/?LinkId=153133。

異常詳細信息: System.Web.HttpRequestValidationException: 從客戶端(ctl00$Content$txtContent="木木木木木木木<br />
")中檢測到有潛在危險的 Request.Form 值。

解決方法(不推薦)

A potentially dangerous Request.Form value was detected from the client (txtTest="<b>"). 由於在.net中,Request時出現有HTML或Javascript等字符串時,系統會認為是危險性值。立馬報錯。

解決方案一:
在.aspx文件頭中加入這句:
<%@ Page validateRequest="false" %>

解決方案二:
修改web.config文件:
<configuration>
<system.web>

<httpRuntime requestValidationMode="2.0" />

<compilation debug="true">
<pages validateRequest="false" />
</system.web>
</configuration>

因為validateRequest默認值為true。只要設為false即可。

來源:[清清月兒]
禁止validateRequest的辦法
http://blog.csdn.net/21aspnet/archive/2007/03/20/1535531.aspx

解決方法(推薦)

為什么很多程序員想要禁止 validateRequest 呢?有一部分是真的需要用戶輸入"<>"之類的字符。這就不必說了。還有一部分其實並不是用戶允許輸入那些容易引起XSS的字符,而是討厭這種報錯的形式,畢竟一大段英文加上一個ASP.Net典型異常錯誤信息,顯得這個站點出錯了,而不是用戶輸入了非法的字符,可是自己又不知道怎么不讓它報錯,自己來處理報錯。

對於希望很好的處理這個錯誤信息,而不使用默認ASP.Net異常報錯信息的程序員們,你們不要禁用validateRequest=false。

正確的做法是在你當前頁面添加Page_Error()函數,來捕獲所有頁面處理過程中發生的而沒有處理的異常。然后給用戶一個合法的報錯信息。如果當前頁面沒有Page_Error(),這個異常將會送到Global.asax的Application_Error()來處理,你也可以在那里寫通用的異常報錯處理函數。如果兩個地方都沒有寫異常處理函數,才會顯示這個默認的報錯頁面呢。

舉例而言,處理這個異常其實只需要很簡短的一小段代碼就夠了。在頁面的Code-behind頁面中加入這么一段代碼:

protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("<script language=javascript>alert('字符串含有非法字符!')</script>");
Server.ClearError(); // 如果不ClearError()這個異常會繼續傳到Application_Error()
Response.Write("<script language=javascript>window.location.href='default.aspx';</script>");
}
}

這樣這個程序就可以截獲 HttpRequestValidationException 異常,而且可以按照程序員的意願返回一個合理的報錯信息。

這段代碼很簡單,所以我希望所有不是真的要允許用戶輸入<xxx>之類字符的朋友,千萬不要隨意的禁止這個安全特性,如果只是需要異常處理,那么請用類似於上面的代碼來處理即可。

而對於那些通過明確禁止了這個特性的程序員,自己一定要明白自己在做什么,而且一定要自己手動的檢查必須過濾的字符串,否則你的站點很容易引發跨站腳本攻擊。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM