我将内容放入来自我不信任的来源的iframe中。为了满足特定需求,我希望内容(可能包括javascript)根本无法设置cookie。推荐的方法是什么?
编辑:我发现这与this question类似。我之前应该提到这一点,但iframe有一个跨源的来源。我想禁用内部设置,即使是在自己的源上设置cookie。沙盒实现了吗?感谢。
答案 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存储数据等