内容安全策略框架-祖先

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

我正在尝试将内容加载到 IFrame 中,因此我实现了 Content-Security-Policy 标头:

Content-Security-Policy: frame-ancestors http://*.example.com/abc.html.

当我将标题指定为

时,我可以在 iframe 上加载内容
Content-Security-Policy: frame-ancestors http://*.example.com/.

但是当我将标题更改为:

Content-Security-Policy: frame-ancestors self http://*.example.com/abc.html.

然后 iframe 上的内容第一次加载,但当我刷新网页时出现以下错误

拒绝在框架中显示

'https://....'
,因为祖先违反了以下内容安全策略指令:

frame-ancestors self http://*.example.com/abc.html.

谁能告诉我为什么刷新页面时出错。 另外,frame-ancestors 是否考虑完整的 URL (

http://*.example.com/abc.html
) 还是仅考虑主机名(如
http://*.example.com
)?

security iframe frame content-security-policy mozilla
2个回答
8
投票

Chrome 浏览器有一个 bug - 它不支持

frame-ancestors
指令中的路径。 Safari 也有同样的错误,并且只有 Firefox 支持此指令中的路径。

因此,对于

frame-ancestors
而不是
http://.example.com/abc.html
,您必须使用
http://.example.com
主机源。
对于其他指令,您可以使用路径和文件名。


1
投票

如果没有有效的示例,很难确切地知道问题是什么。但根据规范,https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors,可以建议对您的 CSP 进行一些调整:

  • 去掉路径,不按照规范使用超过方案、主机和端口。
  • 使用预期的方案(http/https)或删除该方案。
  • 使用通配符 https://*.example.com,而不仅仅是 https://.example.com
  • 使用“自我”,而不是自我
© www.soinside.com 2019 - 2024. All rights reserved.