在我的页面上,我给出了层次结构:
Page - http://179.15.31.103/path
|- frame - //proxy.domain.training/path
|- frame - https://app.domain.training/path
内框带有给定的标题
Content-Security-Policy:frame-ancestors app.domain.training proxy.domain.training domain.training *.domain.training 179.15.31.103
看起来一切都是正确的,但我在chrome中出现了这样的错误(ff中的错误):
拒绝展示' https://app.domain.training/path'因为祖先违反了以下内容安全策略指令:" frame-ancestors app.domain.training proxy.domain.training domain.training * .domain.training 179.15.31.103"。
我认为它可能是因为https,但我无法检查它。
答案 0 :(得分:0)
我建议将URL方案添加到Content-Security-Policy
标头中的域中。您最终可能需要两次指定域名以涵盖http
和https
,但它似乎确实可以解决问题。
我遇到了类似的问题;如果父页面是通过普通http
提供的,并且iframed页面提供了包含父域但没有URL方案的CSP标题,则Firefox和Chrome都会给出您引用的错误。
我发现为什么会发生这种情况的最大线索是在Pale Moon的(一个Firefox分叉)发行说明中:
26.5.0(2016-09-28)修正/变更:
实施了破解CSP(内容安全政策)规范的变更;当通过http加载带有CSP的页面时,Pale Moon现在解释CSP 指令还包括CSP中列出的主机的https版本 如果未明确列出方案(http / https)。这打破了CSP 1.0更具限制性,不允许这种跨协议访问,但与CSP 2一致,允许这样做。
https://www.palemoon.org/releasenotes-archived.shtml
然而,Pale Moon 26.5.0似乎仍然与Firefox和Chrome类似。
Scott Helme还在博客中发表了关于Safari similar issue的博文,但听起来现在已经解决了。
要注意的另一件事是框架页面是否也提供X-Frame-Options
标题。我相信Firefox和Safari是唯一同时支持此标头和CSP frame-ancestors
标头的浏览器,当然在Firefox的情况下X-Frame-Options
似乎确实优先。使用X-Frame-Options ALLOW-FROM
,您只能指定一个URI,因此您可能需要根据需要查看不同浏览器的标题。