仅在 Chrome 中出现 2 个深度 iFrame 的“拒绝框架”错误

Posted

技术标签:

【中文标题】仅在 Chrome 中出现 2 个深度 iFrame 的“拒绝框架”错误【英文标题】:"Refused to frame" error with 2 deep iFrame only in Chrome 【发布时间】:2021-04-20 19:13:37 【问题描述】:

我有一个网站,该网站托管一个 iFrame,该 iFrame 在其中托管另一个 iFrame,因此 iFrame 的深度为 2。当我在 Chrome 上运行时,我收到以下错误并且不显示最低级别的 iFrame,尽管中间层确实显示。当我使用 Firefox 访问它时,一切正常,控制台没有记录任何错误。

Chrome 控制台错误:

Refused to frame 'site1' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' site1 site2 site3".

正如您从错误消息中看到的那样,我将链中的所有级别都引用为标题​​中的框架祖先,所以我无法想出更多的站点来列出。此外,如果我尝试在没有最高父级的情况下在 Chrome 中打开中间网站,则一切正常,显示最低级别的 iFrame。任何人都可以就我可能遗漏的内容提供任何提示吗?

【问题讨论】:

【参考方案1】:

原来这都是我的错。我不理解 frame-ancestors 和 frame-src 之间的区别。我什至没有意识到有两组不同的价值观。一旦我通过使用 frame-ancestors 列出父域并使用 frame-src 列出子域来理顺这一点,一切都按照它应该的方式工作。

【讨论】:

【参考方案2】:

当我使用 Firefox 访问它时,一切正常,控制台没有记录任何错误。

Firefox 在控制台中有 bug with logging frame-ancestor 的错误。

Chrome 控制台错误:拒绝构建“site1”,因为祖先违反了以下内容安全策略指令:"frame-ancestors 'self' site1 site2 site3"

这很奇怪,因为当在 frame-ancestors 指令中指定了上游 DOM 帧的所有主机源时,Chrome 肯定是 allows nested iframe。

也许在您的“site1 site2 site3”中出现了data: 源? 还是一些嵌套的 iframe 发布了X-Frame-Options 标头?

是的,frame-ancestors 指令很复杂而且有漏洞,但我认为你的问题中有一些隐藏的细节。

【讨论】:

以上是关于仅在 Chrome 中出现 2 个深度 iFrame 的“拒绝框架”错误的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Chrome 中调整 iframe 大小问题

iframe 仅在 Firefox 中不加载

为啥 iframe 仅在 iOS 中为空白?

以前工作的 iframe 中出现“Chrome 检测到异常代码”错误

仅在 Google Chrome 中出现“无效的表单控件”

IOS15 升级后 Iframe 内容未加载到 Iphone 中