用expression的一行代碼解決iframe掛馬的問(wèn)題
更新時(shí)間:2007年12月20日 22:58:30 作者:
相信大多數(shù)朋友都是iframe木馬的受害者,有朋友的網(wǎng)站被注入了n回iframe,心情可想而知。而且現(xiàn)在ARP攻擊,注入iframe也是輕而易舉的事,僅局域網(wǎng)里都時(shí)刻面臨威脅,哎,什么世道。接近年關(guān),為了防止更多的朋友受到攻擊,于是細(xì)細(xì)說(shuō)下。
(包含服務(wù)器端注入、客戶端ARP注入等)IE Only——一般只有IE害怕iframe這樣的掛馬,所以靈兒就拿IE開刀。
在閱讀本文之前,我們先了解一下expression;
IE5及其以后版本支持在CSS中使用expression,用來(lái)把CSS屬性和JavaScript腳本關(guān)聯(lián)起來(lái),這里的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。就是說(shuō)CSS屬性后面可以是一段JavaScript表達(dá)式,CSS屬性的值等于Javascript表達(dá)式執(zhí)行的結(jié)果。在表達(dá)式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對(duì)象。這個(gè)表達(dá)式就好像是在這個(gè)元素的一個(gè)成員函數(shù)中一樣。
很多朋友都知道CSS可以直接描述一個(gè)可視標(biāo)記的外觀。例如:p{color:red} 則網(wǎng)頁(yè)里所有p標(biāo)記里的文字顏色都會(huì)變成紅色;iframe不也是一個(gè)標(biāo)記嗎?開始跟靈兒寫代碼吧,呵呵:
iframe{...這里寫描述外觀的CSS代碼;};
仔細(xì)想想要防止iframe里的東東被下載的最好辦法是什么?核心來(lái)了,那就是切斷iframe里的請(qǐng)求,切斷請(qǐng)求就是要迅速銷毀iframe對(duì)象。如何實(shí)現(xiàn)呢,上面不是介紹了expression嗎?expression是可以執(zhí)行JS腳本的哈。語(yǔ)法格式如下二種:
標(biāo)記固有的CSS屬性名:expression(JS表達(dá)式);
或 自定義屬性名:expression(JS表達(dá)式);
在這里我們選擇第二種,代碼應(yīng)該大致是這樣 iframe{v:expression(JS表達(dá)式);}
接下來(lái)的問(wèn)題是如何銷毀網(wǎng)頁(yè)里所有的iframe對(duì)象;使用JS實(shí)現(xiàn)的原理是這樣的:使iframe里的請(qǐng)求地址變成空白頁(yè)(about:blank),再將iframe對(duì)象從DOM(文檔對(duì)象模型)中移除就可以切斷所有iframe里的請(qǐng)求了。移除DOM節(jié)點(diǎn)的方法比較多,我這里就用 outerHTML這個(gè)屬性吧。CSS代碼如下:iframe{v:expression(this.src='about:blank',this.outerHTML='');};
說(shuō)明:前面的v字是靈兒自己定義的一個(gè)CSS屬性,這里的this代表所有將要描述外觀的iframe對(duì)象,中間的逗號(hào)代表二句代碼一起執(zhí)行,沒(méi)有執(zhí)行優(yōu)先順序,這可是強(qiáng)有力的保證噢。about:blank代表空白頁(yè),大家都知道的。outerHTML屬性是DOM對(duì)象包含自身的HTML代碼,而innerHTML則是DOM對(duì)象(不含本身)里面所包含的HTML代碼。
爽快,代碼寫好了,就讓我信來(lái)測(cè)試一下有沒(méi)有效果。
首先,新建一個(gè)網(wǎng)頁(yè),插入以上的CSS代碼(或在您現(xiàn)有的CSS代碼里加入上面那句):
<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>
然后在這個(gè)頁(yè)面插入幾個(gè)IFRAME代碼,假設(shè)它們是被掛的木馬網(wǎng)頁(yè)。代碼如下:
<iframe src="http://www.baidu.com"></iframe> 百度
<iframe src="http://www.126.com/"></iframe> 126郵箱
<iframe src="http://www.163.com"></iframe> 網(wǎng)易
保存為noiframe.htm,打開瀏覽器測(cè)試一下(本地測(cè)試需要啟用頂部禁用的腳本的提示條哦)。我這里使用抓包工具來(lái)測(cè)試,不過(guò)也沒(méi)有必要使用抓包工具,一個(gè)最簡(jiǎn)單有效的方法是打開IE的緩存文件夾,先清空它,再刷新這個(gè)頁(yè)面,看看緩存文件夾里有沒(méi)有這三個(gè)網(wǎng)站里的文件。如果沒(méi)有,說(shuō)明沒(méi)有任何請(qǐng)求結(jié)果被返回——測(cè)試結(jié)果是令人滿意的,我的臉上有些微笑 ^^*,這時(shí)同事遞給我一塊餅,蠻好吃的。
提示:Windows XP SP2的緩存文件夾位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
細(xì)心的朋友發(fā)現(xiàn)問(wèn)題來(lái)了,如果我自己的網(wǎng)頁(yè)里要使用iframe這個(gè)東東怎么辦?
答:如果要使自己的iframe顯示在網(wǎng)頁(yè)里,而別人掛的IFRAME馬都不起作用,在CSS里加一個(gè) #f126{v:expression() !important}
對(duì)應(yīng)的IFRAME代碼為:<iframe id="f126" name="f126" src="http://www.126.com/"></iframe> 就OK了。
提示:IE7中優(yōu)先執(zhí)行標(biāo)注有“!important”描述的樣式,IE6不認(rèn)識(shí)!important,采用就近原則,所以IE6的這個(gè)代碼放在CSS的最后就可以了。
這里的f126,有很多朋友有疑問(wèn),他們問(wèn)我為什么取"f126",我這樣回答——這個(gè)f126是隨意取的,只要下面的iframe里的ID屬性和CSS里的一致就行了。同事又要遞一塊餅我吃,我說(shuō)飽了哈..嘻嘻..
當(dāng)然掛馬者可以構(gòu)造這樣的代碼<iframe style="v:expression() !important" src="URL"></iframe>使我的防御方式失效,不過(guò)它得特意去看我的CSS代碼里iframe里的前綴v,如果我的v是變化的呢,哈哈,是不是也不管用呢!
小結(jié):以上的方法只是停止了iframe的請(qǐng)求并銷毀了它本身,但以后的掛馬方式改變了,例如改成<script></script>方式掛,就不能用這種方法來(lái)解決了;此這個(gè)方法不是最終的解決案,最終的解決方案是找出真正被掛IFRAME的原因,堵住源頭。這可不是我的事哈,呵~
應(yīng)用實(shí)例:http://www.cncert.net 以此代碼配合MD5(hash)校驗(yàn),非常完美的防掛馬解決方案;
在閱讀本文之前,我們先了解一下expression;
IE5及其以后版本支持在CSS中使用expression,用來(lái)把CSS屬性和JavaScript腳本關(guān)聯(lián)起來(lái),這里的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。就是說(shuō)CSS屬性后面可以是一段JavaScript表達(dá)式,CSS屬性的值等于Javascript表達(dá)式執(zhí)行的結(jié)果。在表達(dá)式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對(duì)象。這個(gè)表達(dá)式就好像是在這個(gè)元素的一個(gè)成員函數(shù)中一樣。
很多朋友都知道CSS可以直接描述一個(gè)可視標(biāo)記的外觀。例如:p{color:red} 則網(wǎng)頁(yè)里所有p標(biāo)記里的文字顏色都會(huì)變成紅色;iframe不也是一個(gè)標(biāo)記嗎?開始跟靈兒寫代碼吧,呵呵:
iframe{...這里寫描述外觀的CSS代碼;};
仔細(xì)想想要防止iframe里的東東被下載的最好辦法是什么?核心來(lái)了,那就是切斷iframe里的請(qǐng)求,切斷請(qǐng)求就是要迅速銷毀iframe對(duì)象。如何實(shí)現(xiàn)呢,上面不是介紹了expression嗎?expression是可以執(zhí)行JS腳本的哈。語(yǔ)法格式如下二種:
標(biāo)記固有的CSS屬性名:expression(JS表達(dá)式);
或 自定義屬性名:expression(JS表達(dá)式);
在這里我們選擇第二種,代碼應(yīng)該大致是這樣 iframe{v:expression(JS表達(dá)式);}
接下來(lái)的問(wèn)題是如何銷毀網(wǎng)頁(yè)里所有的iframe對(duì)象;使用JS實(shí)現(xiàn)的原理是這樣的:使iframe里的請(qǐng)求地址變成空白頁(yè)(about:blank),再將iframe對(duì)象從DOM(文檔對(duì)象模型)中移除就可以切斷所有iframe里的請(qǐng)求了。移除DOM節(jié)點(diǎn)的方法比較多,我這里就用 outerHTML這個(gè)屬性吧。CSS代碼如下:iframe{v:expression(this.src='about:blank',this.outerHTML='');};
說(shuō)明:前面的v字是靈兒自己定義的一個(gè)CSS屬性,這里的this代表所有將要描述外觀的iframe對(duì)象,中間的逗號(hào)代表二句代碼一起執(zhí)行,沒(méi)有執(zhí)行優(yōu)先順序,這可是強(qiáng)有力的保證噢。about:blank代表空白頁(yè),大家都知道的。outerHTML屬性是DOM對(duì)象包含自身的HTML代碼,而innerHTML則是DOM對(duì)象(不含本身)里面所包含的HTML代碼。
爽快,代碼寫好了,就讓我信來(lái)測(cè)試一下有沒(méi)有效果。
首先,新建一個(gè)網(wǎng)頁(yè),插入以上的CSS代碼(或在您現(xiàn)有的CSS代碼里加入上面那句):
<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>
然后在這個(gè)頁(yè)面插入幾個(gè)IFRAME代碼,假設(shè)它們是被掛的木馬網(wǎng)頁(yè)。代碼如下:
<iframe src="http://www.baidu.com"></iframe> 百度
<iframe src="http://www.126.com/"></iframe> 126郵箱
<iframe src="http://www.163.com"></iframe> 網(wǎng)易
保存為noiframe.htm,打開瀏覽器測(cè)試一下(本地測(cè)試需要啟用頂部禁用的腳本的提示條哦)。我這里使用抓包工具來(lái)測(cè)試,不過(guò)也沒(méi)有必要使用抓包工具,一個(gè)最簡(jiǎn)單有效的方法是打開IE的緩存文件夾,先清空它,再刷新這個(gè)頁(yè)面,看看緩存文件夾里有沒(méi)有這三個(gè)網(wǎng)站里的文件。如果沒(méi)有,說(shuō)明沒(méi)有任何請(qǐng)求結(jié)果被返回——測(cè)試結(jié)果是令人滿意的,我的臉上有些微笑 ^^*,這時(shí)同事遞給我一塊餅,蠻好吃的。
提示:Windows XP SP2的緩存文件夾位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
細(xì)心的朋友發(fā)現(xiàn)問(wèn)題來(lái)了,如果我自己的網(wǎng)頁(yè)里要使用iframe這個(gè)東東怎么辦?
答:如果要使自己的iframe顯示在網(wǎng)頁(yè)里,而別人掛的IFRAME馬都不起作用,在CSS里加一個(gè) #f126{v:expression() !important}
對(duì)應(yīng)的IFRAME代碼為:<iframe id="f126" name="f126" src="http://www.126.com/"></iframe> 就OK了。
提示:IE7中優(yōu)先執(zhí)行標(biāo)注有“!important”描述的樣式,IE6不認(rèn)識(shí)!important,采用就近原則,所以IE6的這個(gè)代碼放在CSS的最后就可以了。
這里的f126,有很多朋友有疑問(wèn),他們問(wèn)我為什么取"f126",我這樣回答——這個(gè)f126是隨意取的,只要下面的iframe里的ID屬性和CSS里的一致就行了。同事又要遞一塊餅我吃,我說(shuō)飽了哈..嘻嘻..
當(dāng)然掛馬者可以構(gòu)造這樣的代碼<iframe style="v:expression() !important" src="URL"></iframe>使我的防御方式失效,不過(guò)它得特意去看我的CSS代碼里iframe里的前綴v,如果我的v是變化的呢,哈哈,是不是也不管用呢!
小結(jié):以上的方法只是停止了iframe的請(qǐng)求并銷毀了它本身,但以后的掛馬方式改變了,例如改成<script></script>方式掛,就不能用這種方法來(lái)解決了;此這個(gè)方法不是最終的解決案,最終的解決方案是找出真正被掛IFRAME的原因,堵住源頭。這可不是我的事哈,呵~
應(yīng)用實(shí)例:http://www.cncert.net 以此代碼配合MD5(hash)校驗(yàn),非常完美的防掛馬解決方案;
相關(guān)文章
最小存貨單位(Stock Keeping Unit, SKU)解析
最小存貨單位(Stock Keeping Unit, SKU)解析...2007-08-08
學(xué)習(xí)dreamweaver cs3新功能之直接生成div+css頁(yè)面
學(xué)習(xí)dreamweaver cs3新功能之直接生成div+css頁(yè)面...2007-09-09
QQ卡機(jī)問(wèn)題解決方法(信息記錄過(guò)大時(shí))
QQ卡機(jī)問(wèn)題解決方法(信息記錄過(guò)大時(shí))...2007-02-02
怎樣按照個(gè)人愛(ài)好設(shè)置默認(rèn)瀏覽器
怎樣按照個(gè)人愛(ài)好設(shè)置默認(rèn)瀏覽器...2007-02-02
釋放C盤(系統(tǒng)盤)空間的27招優(yōu)化技巧
釋放C盤(系統(tǒng)盤)空間的27招優(yōu)化技巧...2006-08-08
完美解決彈出網(wǎng)頁(yè)或不定時(shí)彈出網(wǎng)頁(yè)的辦法
完美解決彈出網(wǎng)頁(yè)或不定時(shí)彈出網(wǎng)頁(yè)的辦法...2007-04-04

