javascript - 如何在 iFrame 上使用 CSP

标签 javascript html css sandbox content-security-policy

我正在使用 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/

相关文章:

javascript - 如何立即更改鼠标悬停时的背景?

html - 使用 css 在 % 处居中文本

html - Ul LI 菜单在 IE 中不显示为 block

javascript - Laravel 4 如何防止 js 注入(inject)?

javascript - JavaScript 数组的 bool 计算

javascript - Zomato API 不工作 - ReactJs

html - 为什么我的 CSS 动画会破坏我的溢出?

javascript - 更新而不是替换用于 ng-repeat 的列表

angular - 如何对齐 Snackbar?

jquery - 在 Eric Martin 的 Simplemodal jQuery 插件中,是否可以即时调整 CSS?