是否可以让 CSP 仅适用于父框架,而不适用于任何 iframe?

bjb*_*568 7 html iframe sandbox content-security-policy

如果我有一个 CSP 设置为的网页:

default-src 'self'; img-src *
Run Code Online (Sandbox Code Playgroud)

或类似的,我有一个像这样的 iframe:

some legal content
<iframe sandbox="allow-scripts" srcdoc="&lt;script>alert('arbitrary code')&lt;/script>"></iframe>
Run Code Online (Sandbox Code Playgroud)

是否有可能允许 iframe 中的代码违反父框架的 CSP 并允许内联脚本/样式、来自其他域的内容或任何其他不违反沙箱限制的任意 HTML 内容?

目前这将给出:

[错误] 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src 'self'”。请注意,'script-src' 未明确设置,因此使用 'default-src' 作为后备。(关于:srcdoc,第 1 行)

CSP规范确认这是正确的行为:

每当用户代理创建一个iframe srcdoc文档中嵌套在受保护的资源浏览器上下文,如果用户代理执行任何政策 对于受保护的资源,用户代理必须执行这些 政策iframe srcdoc文件也是如此。

ant*_*an1 3

这不可能。

只有两种方法可以实现您所追求的目标:

  1. 更改父页面的 CSP 规则,将您的任意代码列入白名单(我建议对您的任意内容使用 CSP 随机数或哈希,而不是不安全内联)。
  2. 将您的 iframe 指向具有您可以控制的规则的外部(子)域,并使用frame-src&将其列入白名单child-src(请参阅第 1 点)。

  • 所以基本上我需要设置一个回显服务器,它只返回任意代码,因此 iframe 不是“iframe srcdoc 文档”? (2认同)