建议的方法,以防止iframe内的任何内容设置cookie

时间:2017-06-30 01:55:13

标签: javascript iframe cookies

我将内容放入来自我不信任的来源的iframe中。为了满足特定需求,我希望内容(可能包括javascript)根本无法设置cookie。推荐的方法是什么?

编辑:我发现这与this question类似。我之前应该提到这一点,但iframe有一个跨源的来源。我想禁用内部设置,即使是在自己的源上设置cookie。沙盒实现了吗?感谢。

1 个答案:

答案 0 :(得分:4)

答案简短:

HTML5 sandbox属性(没有allow-same-origin关键字阻止iframe读/写Cookie 。对于同源和跨源iframe都是如此。

使用allow-scripts启用JS不会干扰对cookie的限制。

<iframe sandbox="allow-scripts" src="..."></iframe>


答案很长:

所以,如果你不完全相信,这个是给你的......

根据W3C Working Draft(2010)和W3C Recommendation(2014),当用户代理(浏览器)解析sandbox属性时,它必须添加某些标志,然后是用于对iframe中的内容施加限制。其中一个标志旨在强制内容成为一个独特的来源,并阻止它读/写cookie:

  

sandbox属性在指定时,会对iframe托管的任何内容启用一组额外限制。

     

指定sandbox属性时,iframe元素的嵌套浏览上下文必须具有以下列表集中给出的标志。

     

...

     

...

     

沙盒原始浏览上下文标记,除非沙箱属性的值在空格上拆分时发现具有allow-same-origin关键字集

     
    

此标志强制内容成为唯一来源,从而阻止其访问来自同一来源的其他内容。

         

此标志还阻止脚本读取或写入document.cookie IDL属性,并阻止访问localStorage。 [WEBSTORAGE]

  

当沙盒iframe尝试编写cookie时,会引发以下异常:

  
    

未捕获DOMException:无法在'Document'上设置'cookie'属性:文档是沙箱并且没有'allow-same-origin'标记。

  

并且没有写过任何cookie。

由于沙盒iframe根本无法写入cookie,因此即使在其原始站点上也无法设置cookie。  (事实上​​,这将是使用allow-same-origin关键字)的用例之一。

  

allow-same-origin属性适用于两种情况。

     

...

     

其次,它可用于嵌入来自第三方网站的内容,沙盒以防止该网站打开弹出窗口等,而不会阻止嵌入式页面与其原始网站进行通信,使用数据库API存储数据等