如何允许所有具有 CSP header 的框架祖先?

How to allow all frame ancestors with CSP header?

我有一个网络应用程序,我想在具有不同域的网络应用程序的 iframe 中显示它。由于我添加了 content-security-policy header 我的应用程序拒绝在 iframe 中显示。我看到我需要添加 frame-ancestors 选项,但我看到的所有示例都使用特定域。我怎样才能允许它用于所有域?是“框祖*;”足够的?谢谢!

简而言之 - 是的,* 允许 iframe 的任何来源,除了 data:

请注意元标记 <meta http-equiv='Content-Security-Policy' content="..."> 中的 frame-ancestors is not supported(但看起来您使用 HTTP header交付 CSP,所以此警告不适合您。

但是如果你真的希望允许所有的框架祖先 - 更可靠的是根本不指定 frame-ancestors 指令,因为现在 Mozilla Firefox 有一些错误。

PS:您没有在浏览器控制台中附加错误的打印屏幕 - 可能是 iframe 被 CSP 以外的其他原因阻止了吗?

在暴露 CSP 详细信息后更新

<html>
  parent page issues CSP: default-src 'self';
  since frame-src omitted, it fallback to default-src and result be: frame-src 'self'

  <iframe src=''></iframe>
</html>

iframe 允许使用与 parent 相同的 scheme://host:port 页面加载。 'self' 是棘手的,因为如果 parent 通过 HTTP: 加载,iframe 通过 HTTPS: 将在 CSP2 浏览器中被阻止。 CSP3 浏览器 do upgrade(见第 3 段)HTTP:到 HTTPS:,一切正常。

如果 parent 页面发布 frame-ancestors * 政策,这意味着您允许将其嵌入到任何其他网页的 iframe 中。 X-Frame-Options HTTP header 提供相同的功能,但 it's overridden 如果发出 frame-ancestor。

  • frame-ancestor 指令不影响 <iframe> 嵌入到发布此 CSP 的页面。它会影响允许嵌入此页面的位置。
  • 但是 <iframe> 可以使用规则 frame-ancestors domain1.com domain2.com 发布自己的 CSP 以限制它嵌入到其他 web-pages.

这就是它的工作原理。您可以使用 test of frame-ancestors 来阐明不同 <iframe src=/srcdoc=.

的详细信息

因此,如果您使用自己的 domain/subdomains 嵌入 iframe,使用起来会更安全:

frame-ancestors 'self';

或者如果您使用子域:

frame-ancestors http://example.com https://example.com http://*.example.com https://*.example.com;