yai*_*zme 4 javascript cookies iframe
我从不信任的来源获取要放入iframe中的内容。对于需要满足的特定需求,我希望内容(可能包括javascript)根本无法设置cookie。推荐的方法是什么?
编辑:我知道这类似于这个问题。我应该早些提到过,但是iframe有一个跨源的来源。我想从内部设置Cookie来禁用内容,即使是在其自身的源上也是如此。沙箱能否达到目标?谢谢。
HTML5 sandbox
属性(不带allow-same-origin
关键字)可防止iframe读取/写入Cookie。同一来源和跨来源的iframe都是如此。
该allow-scripts
属性将启用JS,但不会干扰对cookie的限制。
<iframe sandbox="allow-scripts" src="..."></iframe>
Run Code Online (Sandbox Code Playgroud)
因此,如果您不完全相信,这是给您的...
根据W3C工作草案(2010)和W3C建议书(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存储数据等。 。