<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    http://www.tkk7.com/ebecket 返還網
    隨筆-140  評論-11  文章-131  trackbacks-0
    asp.net開發中,經常遇到“從客戶端檢測到有潛在危險的Request.Form 值”錯誤提示,很多人給出的解決方案是:

    1、web.config文檔<system.web>后面加入這一句: <pages validaterequest="false"/>
    示例:
    <?xml version="1.0" encoding="gb2312" ?>
    <configuration>
    <system.web>
    <pages validaterequest="false"/>
    </system.web>
    </configuration>

    2、在*.aspx文檔頭的page中加入validaterequest="false",示例如下:
    <%@ page validaterequest="false" language="c#" codebehind="index.aspx.cs" autoeventwireup="false" inherits="mybbs.webform1" %>

    其實這樣做是不正確的,會給程序安全帶來風險。

      ASP.Net 1.1后引入了對提交表單自動檢查是否存在XSS(跨站腳本攻擊)的能力。當用戶試圖用之類的輸入影響頁面返回結果的時候,ASP.Net的引擎會引發一個 HttpRequestValidationExceptioin。這是ASP.Net提供的一個很重要的安全特性。因為很多程序員對安全沒有概念,甚至都不知道XSS這種攻擊的存在,知道主動去防護的就更少了。ASP.Net在這一點上做到默認安全。這樣讓對安全不是很了解的程序員依舊可以寫出有一定安全防護能力的網站。

      但是,當我Google搜索 HttpRequestValidationException 或者 "A potentially dangerous Request.Form value was detected from the client"的時候,驚奇的發現大部分人給出的解決方案竟然是在ASP.Net頁面描述中通過設置 validateRequest=false 來禁用這個特性,而不去關心那個程序員的網站是否真的不需要這個特性??吹梦疫@叫一個膽戰心驚。安全意識應該時時刻刻在每一個程序員的心里,不管你對安全的概念了解多少,一個主動的意識在腦子里,你的站點就會安全很多。

      為什么很多程序員想要禁止 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 (HttpContext.Current.Server.GetLastError() is HttpRequestValidationException)
    {
    HttpContext.Current.Response.Write("請輸入合法的字符串【<a href=\"javascript:history.back(0);\">返回</a>】");
    HttpContext.Current.Server.ClearError();
    }
    }
    這樣這個程序就可以截獲 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;", "</b>");
    sb.Replace("&lt;i&gt;", "<i>");
    sb.Replace("&lt;/i&gt;", "</i>");
    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');">
    posted on 2009-10-16 14:17 becket_zheng 閱讀(268) 評論(0)  編輯  收藏 所屬分類: web前端開發
    主站蜘蛛池模板: 亚洲1234区乱码| 免费v片在线观看无遮挡| 久久亚洲国产精品五月天婷| 国产成人亚洲精品电影| 妞干网手机免费视频| 亚洲依依成人亚洲社区| 99久久免费国产精品特黄| 亚洲福利视频一区二区三区| 蜜桃AV无码免费看永久| 亚洲五月丁香综合视频| 国产成人免费爽爽爽视频| 亚洲精品自偷自拍无码| 国产jizzjizz视频全部免费| 午夜亚洲乱码伦小说区69堂| 亚洲一级特黄大片无码毛片| 亚洲精品偷拍视频免费观看| 亚洲色婷婷一区二区三区| 日韩免费观看一区| 亚洲同性男gay网站在线观看| 亚洲AV无码久久精品蜜桃| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产成人精品久久亚洲| 一区二区三区在线免费观看视频| 久热免费在线视频| 久久青草亚洲AV无码麻豆| 99久久免费看国产精品| 亚洲人成77777在线观看网| 免费在线观看日韩| 免费一区二区无码东京热| 亚洲国产精品张柏芝在线观看 | 精品一卡2卡三卡4卡免费视频| 成人免费一区二区三区在线观看| 亚洲成AV人片在WWW色猫咪| 最近中文字幕高清免费中文字幕mv| 亚洲日韩在线观看| 日韩精品无码一区二区三区免费| 久久久久亚洲av成人无码电影| 鲁死你资源站亚洲av| 亚洲乱码国产乱码精品精| 97国产在线公开免费观看| 亚洲AV无码一区二区三区网址 |