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 · 9233 次点击
    这是一个创建于 4392 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大家,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   ·   实用小工具   ·   2143 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:39 · PVG 08:39 · LAX 16:39 · JFK 19:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.