2014-04-01 37 views
1

Iframes已知用于在iframe中对内部的JavaScript 进行沙盒处理。但是,反过来是真的吗?内部框架是否保护其内容不在之外(在托管网页上)?我的基本测试表明他们这样做,但我找不到明确的文档。iframe可以保护其外部JavaScript的内容吗?

如果你很好奇,这是我用例:

的浏览器插件必须显示在第三方敏感的文字,不可信的网页。理想情况下,它将注入文本,使其不能通过在不受信任的网页上运行的JavaScript访问。用户可能会看到它; JavaScript可能不会。

回答

1

用于分离父文档和iframed文档的JavaScript环境的机制在两个方向上的工作方式相同。

  • 他们有他们自己的环境
  • 访问其他环境通过parentframeNode是可能的,如果它们包含在同一起源文件
  • postMessage可以使用,即使在他们之间传递一个字符串他们不在同一个原点(但必须由收到该消息的文档来收听)。

的浏览器插件必须显示在第三方敏感的文字,不可信的网页。理想情况下,它将注入文本,使其不能通过在不受信任的网页上运行的JavaScript访问。用户可能会看到它; JavaScript可能不会。

这听起来像是一种更好的解决方法,它使用在浏览器chrome中显示文本而不是嵌入页面本身的机制,例如,与铬popup api

+0

嘿,谢谢你的回答。我认为我的案例仍然需要iframe,因为我实际上用敏感文本替换了网页的现有元素。尽管我最终可能会使用弹出窗口,但是这些iframe应该替换网页中的实际元素。 – jonS90

0

尽我所知,内容是受保护的。

Iframes的内容是(by default)视为来自不同来源。这会使same-origin policy发挥作用,防止每个页面访问其他的DOM。

但是,如果你做<iframe sandbox="allow-same-origin">...</iframe>),那么可以访问iframe的内容。这里有一个重要的问题:

  • 可以恶意的JavaScript编程设置allow-same-origin进入一个iframe

我不知道在这个明确的文件,但我的谷歌浏览器测试中说,编程改变沙箱属性对iframe中没有任何影响。是的,您可以动态更改​​属性,但它不起作用。