如何在 iFrame 上使用 CSP

RPT*_*RPT 3 html javascript css sandbox content-security-policy

我正在使用 iFrame 来包含外部 html 源https://good.com/main.html

\n\n
<iframe src=\xe2\x80\x9chttps://good.com/main.html" scrolling="no" style="overflow: hidden; height: 700px;"></iframe>\n
Run Code Online (Sandbox Code Playgroud)\n\n

good.com/main.html导入并执行以下 javascript

\n\n
https://good.com/a.js\nhttps://good.com/b.js\nhttps://bad.com/c.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法阻止good.com/main.html导入和执行bad.com/c.jshttps://good.com更具体地说,阻止任何与?不具有相同域的资源。

\n\n

我尝试对iFrame进行沙箱处理

\n\n
<iframe sandbox=\xe2\x80\x9callow-same-origin allow-scripts\xe2\x80\x9d src=\xe2\x80\x9chttps://good.com/main.html\xe2\x80\x9d scrolling="no" style="overflow: hidden; height: 700px;"></iframe>\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它仍然导入并执行https://bad.com/c.js

\n\n

有没有办法阻止源导入并执行任何外部js?

\n\n

我读到有关iFrames 上的 CSP 的信息,但我不确定它\xe2\x80\x99s 的用法。

\n

Ste*_*n R 5

从广义上讲,你不能。iframe 有自己的 CSP,您无法从父页面传递策略。

也就是说,您在问题中链接到的 iframe 元素的“csp”属性在某种程度上允许这样做。它允许您请求iframe 源应用您在“csp”属性中设置的 CSP;但你不能强制执行,只能要求。所以理论上你可以这样做:

<iframe csp="default-src 'none';" ...>

iframe 的源可能会也可能不会实现您请求的 CSP。

请注意,这是全新的,并且(据报道)仅在 Chrome 和 Opera 中受支持。