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

          常用鏈接

          留言簿(1)

          隨筆檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

          問(wèn)題分析

            Web頁(yè)面包含文本和HTML標(biāo)記,它們由服務(wù)器建立,被客戶(hù)端解釋。HTML標(biāo)記一般被服務(wù)器特殊對(duì)待。例如,“<”一般指示一個(gè)HTML標(biāo)記的開(kāi)始,“<P>”可以影響頁(yè)面的顯示格式,<Script>可以將腳本代碼引入瀏覽器而執(zhí)行。

            對(duì)于靜態(tài)頁(yè)面,服務(wù)器可以完全控制它在客戶(hù)端如何解釋。但是對(duì)于動(dòng)態(tài)頁(yè)面,服務(wù)器就不可能完全控制它在客戶(hù)端的解釋行為了。這樣就產(chǎn)生了問(wèn)題:如果動(dòng)態(tài)頁(yè)面中包含了不可信的內(nèi)容,那么無(wú)論是服務(wù)器端還是客戶(hù)端,就不能保證是否會(huì)發(fā)生安全問(wèn)題。

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

          應(yīng)對(duì)措施分析

            通常,不被信任的內(nèi)容主要來(lái)自以下幾個(gè)方面:URL參數(shù),表單輸入元素,Cookies和數(shù)據(jù)庫(kù)查詢(xún)。要減輕這些方面可能導(dǎo)致的攻擊,建議采取如下的步驟:

          1、為每個(gè)由服務(wù)器產(chǎn)生的Web頁(yè)面明確地設(shè)置字符集編碼

          2、鑒別特殊的字符

          3、對(duì)動(dòng)態(tài)輸出內(nèi)容編碼

          4、過(guò)濾動(dòng)態(tài)輸出內(nèi)容中的特殊字符

          5、檢查cookies 值

          以下詳細(xì)分析這5個(gè)步驟。

          第一步:明確地設(shè)置字符集編碼

          字符集編碼就是頁(yè)面的字符編碼體系,在瀏覽器中可以通過(guò)“查看/編碼”來(lái)轉(zhuǎn)換:

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

           如果Web服務(wù)器不能指定使用哪個(gè)字符集編碼,那么它就不能區(qū)分出特殊字符。沒(méi)有指定字符集編碼的Web頁(yè)面之所以可以在大多數(shù)時(shí)間中工作良好,這是因?yàn)樵诖蠖鄶?shù)的字符集編碼類(lèi)別中,同一字符對(duì)應(yīng)一個(gè)小于128的字節(jié)值。對(duì)于大于128的特殊字符,例如“<”,將采用16位字符編碼方案處理。一些瀏覽器能夠識(shí)別并執(zhí)行這種編碼方案,但同時(shí),攻擊者也可能據(jù)此使用惡意腳本,使防范難度加大,因?yàn)榉?wù)器可能完全不能了解哪個(gè)字節(jié)代表哪個(gè)特殊字符。例如,字符集UTF-7為“<”和“>”提供了可選編碼,幾種流行的瀏覽器一般將它們看做標(biāo)記的起始和結(jié)束字符。為了不造成服務(wù)器和客戶(hù)端的字符編碼的不一致,Web服務(wù)器應(yīng)該明確設(shè)置字符集,以確認(rèn)插入的數(shù)據(jù)是否為特殊字符編碼的后續(xù)字節(jié)。比如,下面的代碼強(qiáng)行設(shè)置了頁(yè)面使用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>

          該文章轉(zhuǎn)載自1024k:http://www.1024k.cn/web/2007/200701/15409.html

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

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 崇明县| 图片| 商南县| 吉木乃县| 泽普县| 永宁县| 普兰县| 台山市| 峨眉山市| 德庆县| 登封市| 昭平县| 宜兴市| 景泰县| 白银市| 平阴县| 隆尧县| 德钦县| 常熟市| 洪湖市| 桓仁| 沛县| 茶陵县| 保定市| 七台河市| 饶平县| 嘉义市| 芷江| 霸州市| 上林县| 垫江县| 西吉县| 盱眙县| 竹山县| 廉江市| 西乌珠穆沁旗| 托克逊县| 稷山县| 色达县| 济阳县| 迭部县|