是否可以有选择地限制iframe对其父文档的访问权限?

时间:2014-12-03 01:30:09

标签: javascript html html5 iframe

情况

我有一个我控制的静态文档(文档A),其中包含一个加载另一个文档(文档B)的iframe,我无法控制。这两个文档都由我“拥有”,它们来自同一个域,实际上是在同一个服务器上。

我的问题

我可以限制文档B对文档A的编程范围的访问吗?我想要暴露A到B的一些变量和函数,但不提供对父窗口的全面访问等等。

我知道通过沙箱属性,我能够对父窗口访问进行广泛的安全限制,但我正在寻找的是提供访问权限的策略对于一些 javascript对象,而不是其他对象。这不是关于XSS或域限制的问题。正如我所说,所有这些文件都存在于同一台服务器上,并且域名不存在问题。

1 个答案:

答案 0 :(得分:1)

这实际上取决于您想要允许的内容以及您想要从其他框架中隐藏的内容。你可以通过将它放在一个巨大的闭包中来隐藏你的大部分代码和函数。其他代码,即使在同一个源中也无法到达闭包内部以获取代码或变量。然后,您可以将您想要的任何函数/方法公开为全局函数,这些函数可以提供对对象的有限访问。

// closure to protect code from tampering
(function() {
    // code in here can't be messed with from outside the closure

    // this method can be called from the outside
    // This function (when called) can return objects from withing the closure 
    // or modify objects within the closure
    window.publicFunc1 = function() {
    };
})();

您不能做的是从另一个框架控制对DOM的访问。如果它们在同一个原点,则它可以完全访问另一帧的DOM。

如果您控制某些基础架构,则可以创建一个技术上指向同一服务器的子域,然后您可以从子域加载页面,从主域加载另一个框架(反之亦然)。这样可以提供真正的保护,因为跨域保护,您可以使用消息传递仅以受控方式进行通信。