推荐的方法,以防止iframe中的任何内容设置Cookie

yai*_*zme 4 javascript cookies iframe

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

编辑:我知道这类似于这个问题。我应该早些提到过,但是iframe有一个跨源的来源。我想从内部设置Cookie来禁用内容,即使是在其自身的源上也是如此。沙箱能否达到目标?谢谢。

Cha*_*a G 7

简短的答案:

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存储数据等。 。

  • 该限制适用于读取 cookie 和写入 cookie。因此 cookie 不会在 HTTP 请求中发送,它们也不会被 HTTP 响应设置(即使响应包含 `set-cookie` 标头)。Cookie 由浏览器通过 document.cookie IDL 属性存储和检索。沙盒 iframe 无法从中读取,也无法写入。 (2认同)