如何防止网页被iframe攻击? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
flylee2011
V2EX    Javascript

如何防止网页被iframe攻击?

  •  
  •   flylee2011 2012-11-20 22:21:21 +08:00 9748 次点击
    这是一个创建于 4761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大家,js中如何避免网页中被插入恶意iframe造成攻击,怎么阻拦所有iframe,然后做一个白名单,允许指定的域名可以iframe。

    谢谢~
    19 条回复    2020-05-15 15:01:46 +08:00
    Frannk
        1
    Frannk  
       2012-11-20 22:31:48 +08:00
    snowhs
        2
    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
        3
    snowhs  
       2012-11-20 22:34:17 +08:00
    这段代码要直接写在html页面上,不要作为一个单独js引用,因为单独js的url可能被ISP拦截
    snowhs
        4
    snowhs  
       2012-11-20 22:36:22 +08:00
    嗯,1L的方法更优雅,虽然考虑到IE6和7还是要用js多一道保险。
    flylee2011
        5
    flylee2011  
    OP
       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
        6
    raptium  
       2012-11-20 22:47:54 +08:00   1
    @flylee2011 上面防止的是你的页面被嵌到其他网页里面
    你要的效果我觉得 直接把所有 iframe element 删掉就好了= =
    raptium
        7
    raptium  
       2012-11-20 22:49:15 +08:00
    但是如果他能做到在你的页面上加入任意的 iframe,那么理论上也能把你的 js 删掉,所以事实上你没办法对付这种情况
    flylee2011
        8
    flylee2011  
    OP
       2012-11-20 22:49:21 +08:00
    @snowhs 我是要防止 被 iframe
    flylee2011
        9
    flylee2011  
    OP
       2012-11-20 22:51:05 +08:00
    @raptium 可以把iframe删掉 ,但是我还是要允许合法的iframe进来,不能都删了的。。 就是怎么防止被iframe。。
    raptium
        10
    raptium  
       2012-11-20 22:52:32 +08:00
    @flylee2011 检查一下域名不就行了么…… 可还是我前面说的,既然你的页面都有可能被人任意改了,你写再多的 js 不也一样能被改掉?
    darasion
        11
    darasion  
       2012-11-20 22:54:42 +08:00
    @flylee2011 iframe 本不该存在。删掉无妨。
    binux
        12
    binux  
       2012-11-20 22:58:28 +08:00
    如果是防止网页中插入iframe。。额,别人都可以插入iframe了,干什么不可以啊
    如果是防止被别人当做iframe插入,在你的页面上用window.top判断
    Frannk
        13
    Frannk  
       2012-11-20 23:15:32 +08:00
    简单来考虑就行吧 服务器上加头就OK了

    被嵌入的话 js不能被干掉 因为有同源策略,外面的不能操作里面的。
    Mutoo
        14
    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
        15
    txlty  
       2012-11-21 01:42:19 +08:00
    完全做不到。其他网站想iframe嵌入你的网站,是别人的事,与你没关系。

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

    测试代码:我不信你能防止其他网站这样iframe你
    <iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
    txlty
        16
    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
        17
    txlty  
       2012-11-21 02:07:47 +08:00
    @binux
    @Frannk

    ↓↓↓这样就可以干掉iframe“里面的”JS了。
    <iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
    mckelvin
        18
    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
        19
    sannyzeng  
       2020-05-15 15:01:46 +08:00
    赞同 @mckelvin 的说法,加 http 头 X-FRAME-OPTIONS
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:08 PVG 04:08 LAX 12:08 JFK 15:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86