我有一个网络应用程序,我想在具有不同域的网络应用程序的 iframe 中显示它。由于我添加了内容安全策略标头,我的应用程序拒绝在 iframe 中显示。我看到我需要添加框架祖先选项,但我看到的所有示例都使用特定域。我怎样才能允许所有域使用它?是“帧祖先*;”足够的?谢谢!
简单来说 - 是的,
*
允许除 data:
之外的任何 iframe 源。
请注意,元标记中<meta http-equiv='Content-Security-Policy' content="...">
不支持frame-ancestors
(但看起来您使用HTTP标头来传递CSP,因此此警告不适合您)。但是如果你真的希望允许所有框架祖先 - 更可靠的是根本不指定
frame-ancestors 指令,因为目前 Mozilla Firefox 有一些错误。
PS:您没有在浏览器控制台中附加错误的打印屏幕 - 可能是 iframe 被 CSP 以外的其他原因阻止?
暴露 CSP 详细信息后更新
<html>
parent page issues CSP: default-src 'self';
since frame-src omitted, its fallback to default-src and result will be: frame-src 'self'
<iframe src=''></iframe>
</html>
iframe 允许使用与父页面加载相同的 scheme://host:port
。 “self”很棘手,因为如果父级通过 HTTP: 加载,则通过 HTTPS: 的 iframe 将在 CSP2 浏览器中被阻止。 CSP3 浏览器升级(参见第 3 段)HTTP: 到 HTTPS:,所以一切正常。 如果父页面发布
frame-ancestors *
政策,则表示您允许将其嵌入到任何其他网页的iframe中。X-Frame-Options HTTP 标头提供相同的功能,但是 如果发布了frame-ancestor,则它会被覆盖。
<iframe>
嵌入到发布此 CSP 的页面中。它会影响允许嵌入此页面的位置。
<iframe>
可以发布自己的CSP,并使用规则
frame-ancestors domain1.com domain2.com
来限制其嵌入到其他网页。
框架祖先测试来澄清不同<iframe src=/srcdoc=
的详细信息。因此,如果您从自己的域/子域嵌入 iframe,使用起来会更安全:
frame-ancestors 'self';
frame-ancestors http://example.com https://example.com http://*.example.com https://*.example.com;