推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
flylee2011

如何防止网页被iframe攻击?

  •  
  •   flylee2011 · Nov 20, 2012 · 10089 views
    This topic created in 4948 days ago, the information mentioned may be changed or developed.
    请教大家,js中如何避免网页中被插入恶意iframe造成攻击,怎么阻拦所有iframe,然后做一个白名单,允许指定的域名可以iframe。

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

    被嵌入的话 js不能被干掉 因为有同源策略,外面的不能操作里面的。
    Mutoo
        14
    Mutoo  
       Nov 21, 2012
    给你分析一下

    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  
       Nov 21, 2012
    完全做不到。其他网站想iframe嵌入你的网站,是别人的事,与你没关系。

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

    测试代码:我不信你能防止其他网站这样iframe你
    <iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
    txlty
        16
    txlty  
       Nov 21, 2012
    比如豆瓣的搜索页,采用了一些措施,其他网站这样嵌入豆瓣的搜索结果,就会跳出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  
       Nov 21, 2012
    @binux
    @Frannk

    ↓↓↓这样就可以干掉iframe“里面的”JS了。
    <iframe seamless sandbox security="restricted" src="你的网站地址"></iframe>
    mckelvin
        18
    mckelvin  
       Nov 21, 2012
    常见的攻击方式叫「clickjacking」,请Google。加http头X-FRAME-OPTIONS防范是最优雅的,tw、fb、Github就是这样做的,但是考虑浏览器兼容再加个js判断。security="restricted" 之后js会被禁用,在类似「分享到xx」这种典型场景下,分享按钮如果也受js限制点了没反应,那就没什么利用价值了。最安全的方式是默认显示空白,js判断安全后显示正常的css。OSWAP上介绍clickjacking的页面上也是这样写的
    sannyzeng
        19
    sannyzeng  
       May 15, 2020
    赞同 @mckelvin 的说法,加 http 头 X-FRAME-OPTIONS
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4139 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 00:05 · PVG 08:05 · LAX 17:05 · JFK 20:05
    ♥ Do have faith in what you're doing.