如何防止iFrame中的JavaScript访问外部站点的属性,即使iFrame的内容来自相同的源?

6

基本上,我想要一个 iFrame,它始终限制其内容,就好像内容来自不同的域一样,即使内容来自相同的源。

有没有什么办法可以做到这一点?


你可能想要看一下Caja或者AdSafe。它们提供了一个包装器来防止“客人代码”对全局对象进行干扰等行为。 - Christoph
2个回答

11

1

这将隐藏子框架/窗口中的window.parent,但不会影响top属性。

但是,在子窗口/框架的onload事件结束之前,window.parent属性仍然是可访问的。

<html>
  <head>
    <style type="text/css">
      #wrapper {width:1000px;height:600px;}
    </style>
    <script type="text/javascript">
      window.onload = function() {
        var frm = document.getElementById('childFrame');
        var win = frm.contentWindow || (frm.contentDocument && frm.contentDocument.parentWindow) || (frm.document && frm.document.parentWindow);
        if (win) win.parent = null;
      }
    </script>
  </head>
  <body>
    <div id="wrapper">
      <iframe id="childFrame" src="child.html" frameborder="0" style="width:100%;height:100%;"></iframe>
    </div>
  </body>
</html>

1
这对我来说似乎不是很安全。如果在子iframe中任何地方仍有对父窗口的引用,它们将泄漏出去,你只会有安全的幻觉。 - apenwarr
还有一个名为 top 的关键字,与 parent 不同的是,它不能被重新定义。 - Cetin Sert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接