一行代码杜绝iframe挂马

作者:吴举斌 来源:站长网 时间:2007-12-23 17:18:00 

相信大多数站长都曾经遭遇过iframe木马的侵害,有朋友的网站被注入了N回iframe,心情可想而知。而且现在ARP攻击,注入iframe也是轻而易举的事,仅局域网里都时刻面临威胁。

今天把原理细细地讲一下吧:

IE Only——一般只有IE害怕iframe这样的挂马,所以就拿IE开刀。

在阅读本文之前,我们先了解一下expression;

IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和JavaScript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是 自定义属性。就是说CSS属性后面可以是一段JavaScript表达式,CSS属性的值等于Javascript表达式执行的结果。在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。

很多朋友都知道CSS可以直接描述一个可视标记的外观。例如:p{color:red} 则网页里 所有p标记里的文字颜色都会变成红色;iframe不也是一个标记吗?开始跟灵儿写代码吧,呵呵:
iframe{...这里写描述外观的CSS代码;};

仔细想想要防止iframe里的东东被下载的最好办法是什么?核心来了,那就是切断iframe里的请求,切断请求就是要迅速销毁iframe对象。如何实现呢,上面不是介绍了expression吗?expression是可以执行JS脚本的哈。语法格式如下二种:

标记固有的CSS属性名:expression(JS表达式);
或 自定义属性名:expression(JS表达式);

在这里我们选择第二种,代码应该大致是这样
iframe{v:expression(JS表达式);}

接下来的问题是如何销毁网页里所有的iframe对象;使用JS实现的原理是这样的:使iframe里的请求地址变成空白页(about:blank),再将iframe对象从DOM(文档对象模型)中移除就可以切断所有iframe里的请求了。移除DOM节点的方法比较多,我这里就用 outerHTML这个属 * 。CSS代码如下:

iframe{v:expression(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:expression(this.src='about:blank',this.outerHTML='');}
</style>

然后在这个页面插入几个IFRAME代码,假设它们是被挂的木马网页。代码如下:

<iframe src=""></iframe> admin5
<iframe src="http://www.caoxoo.com/"></iframe>草讯
<iframe src=" http://www.ssguo.com/"></iframe> 涩果

保存为noiframe.htm,打开浏览器测试一下(本地测试需要启用顶部禁用的脚本的提示条哦)。我这里使用抓包工具来测试,不过也没有必要使用抓包工具,一个最简单有效的方法是打开IE的缓存文件夹,先清空它,再刷新这个页面,看看缓存文件夹里有没有这三个网站里的文件。如果没有,说明没有任何请求结果被返回——测试结果是令人满意的,我的脸上有些微笑 ^^*,这时同事递给我一块饼,蛮好吃的。

提示:Windows XP SP2的缓存文件夹位置 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files

细心的朋友发现问题来了,如果我自己的网页里要使用iframe这个东东怎么办?

答:如果要使自己的iframe显示在网页里,而别人挂的IFRAME马都不起作用,在CSS里加一个

#caoxoo{v:expression() !important}

对应的IFRAME代码为:

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

就OK了。

提示:IE7中优先执行标注有"!important"描述的样式,IE6不认识!important,采用就近原则,所以IE6的这个代码放在CSS的最后就可以了。

这里的f126,有很多朋友有疑问,他们问我为什么取"f126",我这样回答——这个f126是随意取的,只要下面的iframe里的ID属性和CSS里的一致就行了。同事又要递一块饼我吃,我说饱了哈..嘻嘻..

当然挂马者可以构造这样的代码
<iframe style="v:expression() !important" src="URL"></iframe>
使我的防御方式失效,不过它得特意去看我的CSS代码里iframe里的前缀v,如果我的v是变化的呢,哈哈,是不是也不管用呢!

小结:以上的方法只是停止了iframe的请求并销毁了它本身,但以后的挂马方式改变了,例如改成

<script></script>

方式挂,就不能用这种方法来解决了;此这个方法不是最终的解决案,最终的解决方案是找出真正被挂IFRAME的原因,堵住源头。这可不是我的事哈!

标签:iframe,木马,arp,expression
0
投稿

猜你喜欢

  • 七个维护服务器安全的技巧

    2008-12-30 14:22:00
  • Linux系统删除文件夹和文件的命令

    2023-10-10 16:37:03
  • 做新站之前先分析一下ADMIN5

    2008-05-20 12:28:00
  • docker搭建es集群实现过程详解

    2023-05-27 19:00:10
  • 怎样将seo融入到编辑的日常工作中

    2007-09-13 18:26:00
  • 如何做一个人气旺的站 我的四个做站经验

    2008-12-23 11:21:00
  • 美国 Lunarpages等六大主机空间的特点综述

    2010-03-22 08:45:00
  • Django+Nginx+uwsgi服务器部署

    2021-08-10 16:33:29
  • 谷歌AdWords五千万激励计划11月30日结束

    2009-11-26 11:09:00
  • 中国电信屏蔽Google背后的秘密

    2008-01-10 13:23:00
  • 一分钟炫彩海量图片 打造绝美个人写真

    2009-11-23 14:00:00
  • 虚拟主机如何解决电信网通间互联互通

    2007-06-26 16:33:00
  • 用Java实现FTP服务器

    2007-03-26 13:49:00
  • CentOS 部署 flask项目的方法

    2023-07-25 00:04:39
  • Facebook发布XMPP界面 拟大举进军IM领域

    2009-11-09 09:15:00
  • 盘点五个最具有中国风土文化特色的网页游戏

    2009-10-22 09:52:00
  • godaddy使用经验谈 Godaddy

    2010-04-07 12:59:00
  • VirtualBox安装Centos6.8出现E_INVALIDARG(0x80070057)的解决方法

    2021-01-21 12:35:52
  • Windows 2000活动目录详解之基础篇

    2009-08-09 13:06:00
  • 企业Sendmail邮件服务器的创建(2)

    2008-02-02 10:47:00
  • asp之家 网站运营 m.aspxhome.com