A potentially dangerous Request.Form value was detected from the client 的解決方案

來源:互聯網
上載者:User

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client

方法一:通過在 Page 指令或 配置節中設定 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("請您輸入合法字串。");
         Server.ClearError(); // 要是不ClearError()這個異常會繼續傳到Application_Error()。
     }
}

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

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

  而對於那些通過 明確禁止了這個特徵的程式員,自己一定要明白自己在做什麼,而且一定要自己手動的檢查必須過濾的字串,否則你的網站非常容易引發跨站指令碼攻擊。

  關於存在Rich Text Editor的頁面應當如何處理?

  要是頁面有富文本編撰器的控制項的,那麼必定會導致有類的HTML標籤提交回來。在這種狀況下,我們不得不將validateRequest="false"。那麼安全性怎麼處理?如何在這種狀況下最大限度的預防跨站指令碼攻擊呢?

  根據微軟的建議,我們應該採取安全上稱為“預設禁止,顯式容許”的策略。

  首先,我們將輸入字串用 HttpUtility.HtmlEncode()來編碼,將其中的HTML標籤徹底禁止。

  然後,我們再對我們所感興趣的、並且是安全性標籤,通過Replace()進行替換。譬如,我們希望有""標籤,那麼我們就將""顯式的替換回""。

  範例程式碼如下:

以下是引用片段:
void submitBtn_Click(object sender, EventArgs e)
   ...{
     // 將輸入字串編碼,這樣所有的HTML標籤都失效了。
     StringBuilder sb = new StringBuilder(
                             HttpUtility.HtmlEncode(htmlInputTxt.Text));
     // 然後我們選擇性的允許<b> 和 <i>
     sb.Replace("&lt;b&gt;", "<b>");
     sb.Replace("&lt;/b&gt;", "");
     sb.Replace("&lt;i&gt;", "<i>");
     sb.Replace("&lt;/i&gt;", "");
     Response.Write(sb.ToString());
   }

這樣我們即容許了部分HTML標籤,又禁止了危險的標籤。

  依據微軟提供的建議,我們要謹慎容許下列HTML標籤,因為這些HTML標籤都是有可能導致跨站指令碼攻擊的。

以下是引用片段:
  • <applet>
  • <body>
  • <embed>
  • <frame>
  • <script>
  • <frameset>
  • <html>
  • <iframe>
  • <img>
  • <style>
  • <layer>
  • <link>
  • <ilayer>
  • <meta>
  • <object>
  •   可能這裡最讓人不能理解的是<img>。但是,看過下列代碼後,就應當明白其危險性了。

    以下是引用片段:
    <img src="javascript:alert('hello');">
    <img src="java
    script:alert('hello');">
    <img src="java
    script:alert('hello');">

      通過<img>標籤是有可能導致Javascript執行的,這樣攻擊者就可以做他想偽裝的任何事情。

    關於<style>也是一樣:

    以下是引用片段:
    <style TYPE="text/javascript">...
       alert('hello');
    </style>

    From: http://www.cnblogs.com/RIVERSPIRIT/articles/1085814.html

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.