因為FF(Firefox)不怕IFRAME,於是就拿IE開刀,不知道比爾有沒有獎發。我唯寫了一句代碼,就搞定了,哈,痛快。就是IE only(特有的)的CSS中的屬性expression,插進去試試,果然那些IFRAME不起作用了。
代碼如下:
<style type="text/css" media="all" id=“http:你自己的網域名稱”>
/*<![CDATA[*/
iframe{
v:expression(this.src='about:blank',this.outerHTML='');/*使用IE Only 的樣式會除所有 IFRAME */
}
#f126{v:expression() !important} //如果要使自己的IFRAME可以執行,在自己的IFRAME裡加上ID="f126";
/*]]>*/
</style>
分析:
首碼:expression(運算式);
這個首碼是可以隨意更換的,我上面取名為"v",例如我可以換成:abc123:expression(this.src='about: blank',this.outerHTML=''); 掛木馬的傢伙得先看你的CSS裡這個首碼,然後掛馬的時候寫成這樣<iframe style="abc123:expression() !important" src="URL"></iframe>,那個首碼一定要是和你的網站一樣的(abc123),才能掛到馬,哈哈哈!如果把首碼做成動態,就非常OK了,看你怎麼掛!
優點:
可以解決一些站長的煩惱,無須去理會人家插了多少IFRAME木馬,那些IFRAME都不起作用;
保護了訪客的安全,這些IFRAME不執行,不下載,就不會破壞到訪問的電腦;
代碼簡單,僅一句CSS樣式,不管你是ASP,ASP.NET,JSP,PHP還是RUBY,都通用;
缺點:
只適合防禦目前的掛IFRAME方案;
使得人家掛馬的方式要改變了,掛馬者可以構造這樣的代碼<iframe style="v:expression() !important" src="URL"></iframe>使我的防禦方式失效,不過掛馬都一定得看我的CSS裡expression前面的這個"v" 字母,我可以換成任意的如:xgz:expression(...),哈哈哈,他也拿我沒辦法,再如,如果我這個首碼是變化的,是不是也行吖 *_*
不能防禦其他標記的馬,如<script>、<applet>、<object>等。
到那時候再來找我吧,呵呵~ 網頁裡插入的IFRAME還是存在,只是不起作用了;
再加固防線,加入以下JS代碼——其實這個代碼可以完全不用:
<script type="text/javascript" language="javascript">
//<![CDATA[
function killfrm()
{
var xgzfrm=document.getElementsByTagName("iframe");
for(var i=0;i<xgzfrm.length;i++)//迴圈檢查所有IFRAME標記,把所有IFRAME的URL都改為空白頁,然後刪除IFRMAE標記;
{
xgzfrm[i].src='about:blank';
xgzfrm[i].outerHTML='';
}
}
window.onload=killfrm;//一邊載入頁面,一邊執行這個JS方法;
//]]>
</script>
另外轉一種解決方案——這種方案不知道管不管用,沒試過,方法如下:
在網頁最後加入<xmp>,再用css控制它的顯示方式,如:xmp {
width:1px;
overflow:hidden;
text-overflow:clip;
white-space: nowrap;
clear: none;
float: none;
line-height: 0px;
display: inline;
}