如何防止iframe访问父窗口,但允许父窗口访问iframe文档?

5

基本上,我想要像这样的东西(它是 ES6):

<iframe id="iframe"></iframe>

<script>
  var iframeDoc = document.getElementById('iframe').contentDocument;
  iframeDoc.open('text/html', 'replace');
  iframeDoc.write(`
    <!doctype html>
    <html>
      <body>
        <script>
          // do not allow window.parent access!
          alert(window.parent.document.cookie);
        <\/script>
      </body>
    </html>
  `);
  iframeDoc.close();
</script>

警告框显示了父窗口的cookie,这是不好的。我希望iframe可以执行自己沙盒化的javascript代码。在HTML5中是否可能实现?

我尝试了sandbox属性及其值的每个排列组合。

可能可以将iframe及其内容构建为数据URI,并将其作为src属性的值,但这似乎有点hacky。(或者不是吗?URI长度有限制吗?)

1个回答

0

是的,我在问题中提到过我尝试使用了sandbox,但它不能满足我的特定要求(它可以阻止双向传输,即iframe到父级或父级到iframe,但不能只阻止其中一个方向)。 - Decade Moon
请查看此博客文章,了解如何使用JS和沙盒实现此操作。https://benfrain.com/sandbox-local-htmlcss-code-snippets-inside-iframe-style-guidespattern-libraries/ - Munsterlander
更新了更好的博客文章答案。 - Munsterlander
1
那篇博客文章似乎更多地涉及CSS沙盒而非JS。它对于防止iframe中的JavaScript访问父窗口没有任何作用。 - Decade Moon
1
那篇帖子和我刚刚发布的HTML5Rocks文章的重点都是,你可以与沙盒iframe进行通信。有多种方法可以实现。HTML5是使用消息传递来传递内容的更好示例。 - Munsterlander
我更喜欢iframe没有任何引导代码(我想一次性指定整个文档的内容),但这也可以。感谢您的帮助! - Decade Moon

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