網站老中毒怎么辦!e-xpression解決IFRAME掛馬煩惱


網站老中毒怎么辦!e-xpression解決IFRAME掛馬煩惱

大家相信大多數站長都曾經遭遇過iframe木馬的侵害,有朋友的網站被注入了N回iframe,心情可想而知。而且現在ARP攻擊,注入iframe也是輕而易舉的事,僅局域網里都時刻面臨威脅今天把原理細細地講一下吧:主要是在CSS中利用e-xpression把iframe標簽的CSS屬性和JavaScript腳本關聯起來,停止了iframe的請求並銷毀了它本身,不過這種方法僅僅對iframe方式的掛馬有效,如果采用js掛馬方式,就奈何不了,治標不治本,就好也是多看看網站代碼,增加網站的安全性,減少一些常見的sql注入了,上傳了等漏洞

在閱讀本文之前,我們先了解一下e-xpression;

IE5及其以后版本支持在CSS中使用e-xpression,用來把CSS屬性和JavaScript腳本關聯起來,這里的CSS屬性可以是元素固有的屬性,也可以是 自定義屬性。就是說CSS屬性后面可以是一段JavaScript表達式,CSS屬性的值等於Javascript表達式執行的結果。在表達式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對象。這個表達式就好像是在這個元素的一個成員函數中一樣。

很多朋友都知道CSS可以直接描述一個可視標記的外觀。例如:p{color:red} 則網頁里 所有p標記里的文字顏色都會變成紅色;iframe不也是一個標記嗎?開始跟我寫代碼吧,呵呵:

iframe{...這里寫描述外觀的CSS代碼;};

仔細想想要防止iframe里的東東被下載的最好辦法是什么?核心來了,那就是切斷iframe里的請求,切斷請求就是要迅速銷毀iframe對象。如何實現呢?廈娌皇牆檣芰薳xpression嗎?e-xpression是可以執行JS腳本的哈。語法格式如下二種:

標記固有的CSS屬性名:e-xpression(JS表達式);

或 自定義屬性名:e-xpression(JS表達式);

在這里我們選擇第二種,代碼應該大致是這樣

iframe{v:e-xpression(JS表達式);}

接下來的問題是如何銷毀網頁里所有的iframe對象;使用JS實現的原理是這樣的:使iframe里的請求地址變成空白頁(about:blank),再將iframe對象從DOM(文檔對象模型)中移除就可以切斷所有iframe里的請求了。移除DOM節點的方法比較多,我這里就用 outerHTML這個屬性吧。CSS代碼如下:

iframe{v:e-xpression(this.src='about:blank',this.outerHTML='');}

說明:前面的v字是我自己定義的一個CSS屬性,這里的this代表所有將要描述外觀的iframe對象,中間的逗號代表二句代碼一起執行,沒有執行優先順序,這可是強有力的保證噢。about:blank代表空白頁,大家都知道的。outerHTML屬性是DOM對象包含自身的HTML代碼,而innerHTML則是DOM對象(不含本身)里面所包含的HTML代碼。

爽快,代碼寫好了,就讓我信來測試一下有沒有效果。

首先,新建一個網頁,插入以上的CSS代碼(或在您現有的CSS代碼里加入上面那句):

<style type="text/css">

iframe{v:e-xpression(this.src='about:blank',this.outerHTML='');}

</style>

然后在這個頁面插入幾個IFRAME代碼,假設它們是被掛的木馬網頁。代碼如下:

<iframe src=""></iframe>

<iframe src="http://www.fl-chiller.com/"></iframe>納金

<iframe src=" http://www.dgnaser.com/"></iframe>

保存為noiframe.htm,打開瀏覽器測試一下(本地測試需要啟用頂部禁用的腳本的提示條哦)。我這里使用抓包工具來測試,不過也沒有必要使用抓包工具,一個最簡單有效的方法是打開IE的緩存文件夾,先清空它,再刷新這個頁面,看看緩存文件夾里有沒有這三個網站里的文件。如果沒有,說明沒有任何請求結果被返回——測試結果是令人滿意的,我的臉上有些微笑 ^^*,這時同事遞給我一塊餅,蠻好吃的。

提示:Windows XP SP2的緩存文件夾位置 C:Documents and SettingsAdministratorLocal SettingsTemporary Internet Files

細心的朋友發現問題來了,如果我自己的網頁里要使用iframe這個東東怎么辦?

答:如果要使自己的iframe顯示在網頁里,而別人掛的IFRAME馬都不起作用,在CSS里加一個

#haoexe{v:e-xpression() !important}

對應的IFRAME代碼為:

<iframe id="9ctrl" name="9ctrl" src="http://www.9ctrl.com/"></iframe>

就OK了。

提示:IE7中優先執行標注有"!important"描述的樣式,IE6不認識!important,采用就近原則,所以IE6的這個代碼放在CSS的最后就可以了。

這里的f126,有很多朋友有疑問,他們問我為什么取"f126",我這樣回答——這個f126是隨意取的,只要下面的iframe里的ID屬性和CSS里的一致就行了。同事又要遞一塊餅我吃,我說飽了哈..嘻嘻..

當然掛馬者可以構造這樣的代碼

<iframe style="v:e-xpression() !important" src="URL"></iframe>

使我的防御方式失效,不過它得特意去看我的CSS代碼里iframe里的前綴v,如果我的v是變化的呢,哈哈,是不是也不管用呢!

小結:以上的方法只是停止了iframe的請求並銷毀了它本身,但以后的掛馬方式改變了,例如改成

<script></script>

方式掛,就不能用這種方法來解決了;此這個方法不是最終的解決案,最終的解決方案是找出真正被掛IFRAME的原因,堵住源頭。這可不是我的事哈!

標簽(Tag): 掛馬

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com