隨筆 - 11  文章 - 2  trackbacks - 0
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(1)

          隨筆檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          在各種Internet攻擊行為中,通過Web方式侵入系統造成信息泄漏、數據丟失的事件非常普遍。例如,攻擊者在頁面表單中輸入惡意內容,繞過輸入檢查,攻擊系統。為此,Web開發者應采取有效的措施從信息采集的入口處堵截惡意內容的進入。本文將對這方面的問題進行分析,并提供幾種應對方法。

          問題分析

            Web頁面包含文本和HTML標記,它們由服務器建立,被客戶端解釋。HTML標記一般被服務器特殊對待。例如,“<”一般指示一個HTML標記的開始,“<P>”可以影響頁面的顯示格式,<Script>可以將腳本代碼引入瀏覽器而執行。

            對于靜態頁面,服務器可以完全控制它在客戶端如何解釋。但是對于動態頁面,服務器就不可能完全控制它在客戶端的解釋行為了。這樣就產生了問題:如果動態頁面中包含了不可信的內容,那么無論是服務器端還是客戶端,就不能保證是否會發生安全問題。

            現在,幾乎所有的商用Web服務器就會建立動態頁面。最典型的一個例子就是我們經常要使用的搜索引擎,它接受用戶的查詢內容后,搜索數據庫,然后將動態內容寫入一個頁面模板,最后顯示給用戶包含搜索結果的頁面。這種情況下,檢查動態內容是否包含了特殊字符就非常重要,例如“<”。如果包含了特殊字符,用戶端的瀏覽器就可能將之誤解為HTML標記或者引入執行程序,而不是當做文本信息顯示出來。危險也就產生于此!如果不對動態頁面進行特殊字符的檢查,那么攻擊者就有可能在交互頁面的輸入表單中寫入些特殊字符串,從而導致輸出頁面執行非法行為。這種例子很多,比如我們編寫一個留言簿,卻不對輸入內容進行特殊字符的校驗,那么攻擊者就有可能填寫特殊字符,最終導致留言簿頁面的非正常工作,例如填寫一段惡意代碼:死循環JavaScript腳本、重復打開窗口的JavaScript腳本。

          應對措施分析

            通常,不被信任的內容主要來自以下幾個方面:URL參數,表單輸入元素,Cookies和數據庫查詢。要減輕這些方面可能導致的攻擊,建議采取如下的步驟:

          1、為每個由服務器產生的Web頁面明確地設置字符集編碼

          2、鑒別特殊的字符

          3、對動態輸出內容編碼

          4、過濾動態輸出內容中的特殊字符

          5、檢查cookies 值

          以下詳細分析這5個步驟。

          第一步:明確地設置字符集編碼

          字符集編碼就是頁面的字符編碼體系,在瀏覽器中可以通過“查看/編碼”來轉換:

            很多Web頁面都省略了字符集編碼設置,也就是說在頁面源代碼頭部HTTP一節中沒有定義charset參數。早期的HTML版本中,如果沒有定義charset參數,字符集編碼就默認為ISO-8859-1。但實際上,許多瀏覽器都有各自的默認字符集編碼。因此,HTML版本4規定,如果沒有指定charset參數,任何可能的字符集編碼都可以使用,這就依賴于用戶的瀏覽器種類了。

           如果Web服務器不能指定使用哪個字符集編碼,那么它就不能區分出特殊字符。沒有指定字符集編碼的Web頁面之所以可以在大多數時間中工作良好,這是因為在大多數的字符集編碼類別中,同一字符對應一個小于128的字節值。對于大于128的特殊字符,例如“<”,將采用16位字符編碼方案處理。一些瀏覽器能夠識別并執行這種編碼方案,但同時,攻擊者也可能據此使用惡意腳本,使防范難度加大,因為服務器可能完全不能了解哪個字節代表哪個特殊字符。例如,字符集UTF-7為“<”和“>”提供了可選編碼,幾種流行的瀏覽器一般將它們看做標記的起始和結束字符。為了不造成服務器和客戶端的字符編碼的不一致,Web服務器應該明確設置字符集,以確認插入的數據是否為特殊字符編碼的后續字節。比如,下面的代碼強行設置了頁面使用ISO-8859-1字符集編碼:

          <HTML>
          <HEAD>
          <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <TITLE>HTML SAMPLE</TITLE>
          </HEAD>
          <BODY>
          <P>This is a sample HTML page
          </BODY>
          </HTML>

          該文章轉載自1024k:http://www.1024k.cn/web/2007/200701/15409.html

          posted on 2007-07-18 18:49 jacksontoto 閱讀(234) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 辽阳市| 江永县| 伊春市| 大连市| 江门市| 循化| 嘉禾县| 延川县| 泾源县| 武胜县| 平江县| 龙泉市| 呼伦贝尔市| 黄平县| 阿坝县| 崇仁县| 鄯善县| 腾冲县| 三门县| 甘谷县| 盘锦市| 措美县| 新泰市| 海淀区| 安仁县| 阿克苏市| 扬中市| 太白县| 阿图什市| 潜山县| 恩施市| 珲春市| 威信县| 黄梅县| 乌苏市| 米泉市| 夏河县| 临城县| 专栏| 台东市| 栾城县|