如何允许所有祖先帧都带有CSP header?

问题描述 投票:0回答:1

我有一个网络应用程序,我想在具有不同域的网络应用程序的 iframe 中显示它。由于我添加了内容安全策略标头,我的应用程序拒绝在 iframe 中显示。我看到我需要添加框架祖先选项,但我看到的所有示例都使用特定域。我怎样才能允许所有域使用它?是“帧祖先*;”足够的?谢谢!

http iframe header content-security-policy
1个回答
18
投票

简单来说 - 是的,

*
允许除
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,则它会被覆盖。

    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;


    

© www.soinside.com 2019 - 2024. All rights reserved.