其实如果要防止被挂IFRAME木马,方法很简单,只需要利用Ja vaScript对IFRAME进行控制即可。方法如下:
话说回来,这种利用第三方页面(比如博客)嵌套恶意IFRAME的手法,在早期的网络攻击中相当常见。其原理并不复杂:攻击者在正常页面里悄悄插入一个看不见的框架,这个框架会加载恶意网站,从而在用户毫无察觉的情况下,实施挂马或钓鱼。
那么,有没有一种相对简单、能一劳永逸的防护思路呢?答案是肯定的。核心思路就是主动控制,利用前端技术让非法的IFRAME根本加载不出来。下面这段代码,就是基于这个逻辑的经典实现。
复制代码
代码如下:
iframe{
v:expression(this.src='about:blank',this.outerHTML='');/*使用CSS属性去除所有IFRAME*/
}
#htmer{v:expression() !important} /*如果要使自己的IFRAME可以执行,在自己的IFRAME里加上ID="htmer",如果你的网页中没有用到IFRAME,那可以把这句代码删除,这样所有的IFRAME都将不执行*/
这段代码的精妙之处在于它的“双向管控”。看第一段规则,它利用CSS的expression行为,将页面中所有的IFRAME元素源地址清空并移除其HTML结构,相当于给整个页面套上了一个“金钟罩”。
但问题来了:如果我自己的网站也需要用到IFRAME嵌入地图、视频等合法内容,岂不是也被误杀了?
这就需要看第二段规则的巧妙设计。它通过#htmer这个ID选择器,并加上!important声明,为特定IFRAME开了一个“白名单”。也就是说,只要你自己信任的IFRAME标记上id="htmer",就能豁免于第一条规则,正常加载和显示。这样一来,既屏蔽了所有来路不明的恶意框架,又保留了自己业务的灵活性。
需要警惕的是,这种基于CSS expression的解决方案主要适用于旧版本的IE浏览器。在现代前端安全实践中,通常会采用更严格的CSP(内容安全策略)头来定义允许加载的资源来源,实现更根本的防护。但不可否认,上面这个思路在特定环境下,依然是一个快速、有效的防御技巧。
总结一下,防IFRAME挂马的关键在于主动拦截与精确放行。通过全局禁用加特征例外的策略,能在不影响正常功能的前提下,有效掐断这条常见的攻击路径。对于仍有 IE 兼容需求的系统,这无疑是个值得收藏的方案。
