我是曉菜鳥")中檢測到有潛在危險的 Request.Form 值" type="hidden"/>

System.Web.HttpRequestValidationException: 從客戶端(name="我是曉菜鳥")中檢測到有潛在危險的 Request.Form 值


  這是一個比較常見的問題了,如果Web表單中有輸入類似於 Html 標簽之類的文本,在通過 Request.QueryString 或者 Request.Form 傳遞這些值的時候,就會觸發這樣的異常,出於腳本注入等安全性考慮,這也是合情合理的。

  先簡單的說說 Request.QueryString 和 Request.Form 吧,

  Request.QueryString(取得地址欄參數值),獲取地址欄中的參數,意思就是取得 Url ”?"號后面的參數值.如果參數有多個就用 ”” 符號連接起來。

    取值:Request.QueryString["Url地址欄中的參數名稱"]


  Request.Form(取得表單參數值),獲取提交的Form中的元素的值。

    取值:Request.Form["表單元素的name屬性名稱"]

 

  一般情況下,程序應盡量過濾掉,或者禁止表單上類似文本的輸入,如果業務上非得有這樣的要求,需要輸入標簽性的文本,可以考慮在數據向服務器端傳遞前,將一些敏感字符按照約定規則替換掉,向客戶端輸出時,再還原出原始文本。比如把 "<" 替換成 "&lt;",向客戶端輸出時,再把"&lt;" 替換成 "<"。

  以上是個人認為比較正確的做法,當然就解決眼前問題而言,如果是Asp.Net WebForm應用程序,就是在 aspx 文件的 page 指令上添加 ValidateRequest=false  屬性值,這是對單一表單的做法,要想作用於更廣泛的Web表單,自然是在 webconfig 文件中做相同的設置。

  另外,如果是Asp.Net MVC應用程序,

  Framework4.0:

    則需要在webconfig文件的 <system.web> 配置節中加上 <httpRuntime requestValidationMode="2.0"></httpRuntime> 配置(如果已存在 <httpRuntime />   節點,只需在其中添加屬性 requestValidationMode="2.0" 。),之后,再在 Controller(作用於整個控制器) 或者 Action(作用於單個方法) 頭上添加 [ValidateInput(false)]   的標識,區別大家都知道的,作用域不同而已,這里說的 Asp.Net MVC 是基於 Framework4.0 的環境的,Framework3.5 下沒試過,想來差不多。

  Framework4.5:

    其實 Framework4.5 下也差不多,只不過 VS 自動生成的 webconfig 配置文件中的 <httpRuntime /> 節點中添加了 Framework 的版本號而已,用法一樣,只需在其中添加屬性 requestValidationMode="2.0"(<httpRuntime targetFramework="4.5"  requestValidationMode="2.0"/>),之后,再在 Controller(作用於整個控制器) 或者 Action(作用於單個方法) 頭上添加 [ValidateInput(false)] 的標識即可。

 


免責聲明!

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



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