内容安全政策违规

时间:2016-07-20 11:26:10

标签: html http https content-security-policy

在我的页面上,我给出了层次结构:

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,但我无法检查它。

1 个答案:

答案 0 :(得分:0)

我建议将URL方案添加到Content-Security-Policy标头中的域中。您最终可能需要两次指定域名以涵盖httphttps,但它似乎确实可以解决问题。

我遇到了类似的问题;如果父页面是通过普通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,因此您可能需要根据需要查看不同浏览器的标题。