如何防止网页被iframe攻击?

2012-11-20 22:21:21 +08:00
 flylee2011
请教大家,js中如何避免网页中被插入恶意iframe造成攻击,怎么阻拦所有iframe,然后做一个白名单,允许指定的域名可以iframe。

谢谢~
9209 次点击
所在节点    JavaScript
19 条回复
Frannk
2012-11-20 22:31:48 +08:00
snowhs
2012-11-20 22:33:18 +08:00
``` javascript
if (window.top!=window.self)
{
// iframed, do something
// check if window.top.document.URL in white list
// `window.top.location = http://your_real_host.xxx` to jump out
}
```
snowhs
2012-11-20 22:34:17 +08:00
这段代码要直接写在html页面上,不要作为一个单独js引用,因为单独js的url可能被ISP拦截
snowhs
2012-11-20 22:36:22 +08:00
嗯,1L的方法更优雅,虽然考虑到IE6和7还是要用js多一道保险。
flylee2011
2012-11-20 22:44:10 +08:00
@snowhs 我下面这段 ,window.top.location 和window.self.location都一样啊?

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

<script type="text/javascript">
console.log(window.top.location);
console.log(window.self.location);
</script>
raptium
2012-11-20 22:47:54 +08:00
@flylee2011 上面防止的是你的页面被嵌到其他网页里面
你要的效果我觉得 直接把所有 iframe element 删掉就好了= =
raptium
2012-11-20 22:49:15 +08:00
但是如果他能做到在你的页面上加入任意的 iframe,那么理论上也能把你的 js 删掉,所以事实上你没办法对付这种情况
flylee2011
2012-11-20 22:49:21 +08:00
@snowhs 我是要防止 被 iframe
flylee2011
2012-11-20 22:51:05 +08:00
@raptium 可以把iframe删掉 ,但是我还是要允许合法的iframe进来,不能都删了的。。 就是怎么防止被iframe。。
raptium
2012-11-20 22:52:32 +08:00
@flylee2011 检查一下域名不就行了么…… 可还是我前面说的,既然你的页面都有可能被人任意改了,你写再多的 js 不也一样能被改掉?
darasion
2012-11-20 22:54:42 +08:00
@flylee2011 iframe 本不该存在。删掉无妨。
binux
2012-11-20 22:58:28 +08:00
如果是防止网页中插入iframe。。额,别人都可以插入iframe了,干什么不可以啊
如果是防止被别人当做iframe插入,在你的页面上用window.top判断
Frannk
2012-11-20 23:15:32 +08:00
简单来考虑就行吧 服务器上加头就OK了

被嵌入的话 js不能被干掉 因为有同源策略,外面的不能操作里面的。
Mutoo
2012-11-21 00:52:52 +08:00
给你分析一下

script guys 利用iframe的目的:
1)刷目标页面的流量;
2)隐藏的后门(争对没有打补丁的浏览器,特别是IE);

恶意iframe的来源
1)跨站攻击(xxs),通过留言或其它方式将<iframe>标签植入页面
2)服务器被植入后门,自动搜索htm,html,asp,php等文件,加入width|height=0的iframe,

由于安全沙箱的存在,有很多事是iframe做不到的,比如读跨域的父页cookie等。

如果你真想阻止iframe的话,从来源下手吧,特别是第二条,建议升级杀毒软件,防火墙,检查是否有后门。iframe不会无端地出现……除非你的前端人员有问题。
txlty
2012-11-21 01:42:19 +08:00
完全做不到。其他网站想iframe嵌入你的网站,是别人的事,与你没关系。

html5中,增加了iframe的安全性,可以阻止iframe内的页面运行脚本,防止iframe src=""里的页面在你的网站上执行代码。这样你的一切限制就都失效了。

测试代码:我不信你能防止其他网站这样iframe你
<iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
txlty
2012-11-21 02:03:50 +08:00
比如豆瓣的搜索页,采用了一些措施,其他网站这样嵌入豆瓣的搜索结果,就会跳出iframe,自动跳到豆瓣的地址
<iframe src="http://www.douban.com/search?q=test"></iframe>

但如果这样,豆瓣就跳不出去了。
<iframe seamless sandbox security="restricted" src="http://www.douban.com/search?q=test"></iframe>

我做过一个聚合搜索网站,通过iframe嵌入多个搜索引擎的结果,所以专门研究过这个问题。

LZ的意思应该是,如何防止大网站嵌入0像素iframe变相对小网站发动攻击?
答案是,无解。
txlty
2012-11-21 02:07:47 +08:00
@binux
@Frannk

↓↓↓这样就可以干掉iframe“里面的”JS了。
<iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
mckelvin
2012-11-21 08:13:57 +08:00
常见的攻击方式叫「clickjacking」,请Google。加http头X-FRAME-OPTIONS防范是最优雅的,tw、fb、Github就是这样做的,但是考虑浏览器兼容再加个js判断。security="restricted" 之后js会被禁用,在类似「分享到xx」这种典型场景下,分享按钮如果也受js限制点了没反应,那就没什么利用价值了。最安全的方式是默认显示空白,js判断安全后显示正常的css。OSWAP上介绍clickjacking的页面上也是这样写的
sannyzeng
2020-05-15 15:01:46 +08:00
赞同 @mckelvin 的说法,加 http 头 X-FRAME-OPTIONS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/52905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX