我试图将内容加载到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:框架祖先self http://*.example.com/abc.html。然后在iframe上的内容是第一次加载,但给出以下错误,当我刷新网页
拒绝显示"https://...."',因为一个祖先违反了以下内容安全策略指令:frame-ancestors self http://*.example.com/abc.html.
有谁能告诉我为什么刷新页面时出现错误吗?框架祖先也考虑完整的url (http://.example.com/abc.html)或只考虑主机名,如http://.example.com?
Chrome浏览器有一个bug -它不支持frame-ancestors
指令中的路径。Safari也有同样的错误,并且只允许Firefox支持此指令中的路径。
所以对于frame-ancestors
而不是http://.example.com/abc.html
,你必须使用http://.example.com
主机源。
对于其他指令,你可以使用路径和文件名。
如果没有工作示例,很难确切地知道问题是什么。但是根据规范https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors,可以建议对CSP进行一些调整:
- 删除路径,它不符合规范使用多于方案、主机和端口。
- 使用预期的方案(http/https)或删除方案
- 使用通配符https://*.example.com,而不仅仅是https://.example.com
- 使用'self',而不是self