【问题标题】:Toggling iFrame Sandbox切换 iFrame 沙盒
【发布时间】:2014-03-06 07:34:00
【问题描述】:

我正在尝试确定是否可以通过编程方式更改 iFrame 的沙盒值。

来自 MDN iframe:

当嵌入文档与主页面同源时, 强烈建议不要同时使用 allow-scripts 和 allow-same-origin 同时,因为这允许嵌入的文档 以编程方式删除沙盒属性。虽然它是 接受,这种情况并不比不使用沙箱更安全 属性。

但是,更改父项中的属性不会成功触发沙盒,因为这将暗示子项。

document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts');

在该 iFrame 中加载的页面可以成功获得对父级的访问权限,如果沙盒工作正常,则不会出现这种情况。属性确实发生了变化,但安全性存在缺陷,因为它不会阻止对专利的访问。

console.log(window.parent.document);

上述内容仍然适用于“以编程方式”启用沙盒的 iFrame。在 Chrome 和 Firefox 中都是这种情况,这意味着要么是有意的未记录功能,要么是执行不力的规范。

有人对适当的期望有什么想法吗?

【问题讨论】:

    标签: javascript html iframe sandbox


    【解决方案1】:

    请试试这个小提琴:http://jsfiddle.net/yAwxy/ 运行脚本时它不起作用onLoad b/c iframe 已经在工作。 如果您尝试onDomready,则会应用沙盒,因为脚本尚未运行。 如果您使用此小提琴登录:

    <iframe id="myFrame" srcdoc="<script>console.log('Executing script inside iFrame')</script>">
    </iframe>
    

    在脚本中

    console.log('Executing script inside page')
    

    当脚本console.log('Executing script inside page') 被包装onLoad 时,输出为:

    Executing script inside iFrame 
    Executing script inside page 
    

    当包裹 onDomready 时:

    Executing script inside page 
    Executing script inside iFrame 
    

    另见http://jsfiddle.net/yAwxy/1/

    所以要改变规则,就必须改变 OndomReady

    【讨论】:

    • 对不起,这不是我要问的。我在问是否可以切换沙盒安全属性并且浏览器接受它们。
    • 对不起,再次,但你不理解这个问题,这不是关于更改属性的值,而是关于浏览器实际实施更改的值和适当的沙盒安全措施,他们目前不是。这不是一个简单的问题,因此除非您熟悉 HTML5 沙盒,否则您不太可能理解。不过感谢您的尝试。
    • 要明确一点,如果您阅读 MDN 上的文章,可以通过编程方式更改沙箱属性,或者至少应该如此,因为他们特别提到这是一种威胁。问题是它不起作用,所以这意味着没有威胁,但是,没有提到在“加载”后沙箱更改将不会被强制或允许的实现,这似乎就是这种情况现在在 Chrome 和 Firefox 中。
    【解决方案2】:

    尝试在沙盒 iframe 内的 Internet Explorer 中动态创建 iframe 内容时,我遇到了类似的问题。在 iframe 已经创建并将内容放置在 iframe 中(在 src= 属性中使用 javascript: URI)之后,我尝试使用 javascript 添加沙盒属性,但 iframe 似乎保留了它的属性在页面中加载时存在。

    在应用沙盒属性时,Internet Explorer 的工作方式似乎与 FireFox 或 Chrome 不同。当设置了 sandbox="allow-scripts" 时,Chrome 和 FireFox 将允许使用 src=javascript:function() 动态创建内容。 IE 似乎在创建过程中应用了沙盒属性中的唯一域,并认为 src=javascript:function() 不是同源,并且不允许动态创建 iframe 内容。

    我不确定您为什么要尝试以编程方式添加沙盒属性,但如果是尝试仅使用动态源加载 iframe 的问题,您可以使用 srcdoc 属性和沙盒属性,唯一的问题是因为IE不支持srcdoc属性。

    要回答您的问题,我认为不可能加载 iframe 及其内容,然后在事后添加沙盒属性并使 iframe 表现为沙盒 iframe。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多