仅在 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 的“拒绝框架”错误的主要内容,如果未能解决你的问题,请参考以下文章