我正在使用 iFrame 来包含外部 html 源 https://good.com/main.html
<iframe src=“https://good.com/main.html" scrolling="no" style="overflow: hidden; height: 700px;"></iframe>
但是 good.com/main.html
导入并执行以下 javascript
https://good.com/a.js
https://good.com/b.js
https://bad.com/c.js
有没有办法阻止good.com/main.html
导入和执行bad.com/c.js
?更具体地说,阻止任何与 https://good.com
?
我尝试了 沙盒 iFrame
<iframe sandbox=“allow-same-origin allow-scripts” src=“https://good.com/main.html” scrolling="no" style="overflow: hidden; height: 700px;"></iframe>
但它仍然导入并执行 https://bad.com/c.js
有什么办法可以防止源码导入执行任何外部js吗?
我读到了 CSPs on iFrames , 但我不确定它的用法。
最佳答案
从广义上讲,你不能。 iframe 有自己的 CSP,您不能从父页面传递策略。
也就是说,您在问题中链接到的 iframe 元素的“csp”属性在某种程度上允许这样做。它允许您请求 iframe 源应用您在“csp”属性中设置的 CSP;但你不能强制执行,只能问。所以理论上你可以这样做:
<iframe csp="default-src 'none';" ...>
iframe 的来源可能实现也可能不实现您请求的 CSP。
请注意,这是全新的并且(据报道)仅在 Chrome 和 Opera 中受支持。
关于javascript - 如何在 iFrame 上使用 CSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378005/