了解内容安全策略框架的范围 - 祖先

时间:2016-11-29 11:46:24

标签: html iframe content-security-policy

到目前为止,我的网络服务器总是设置X-Frame-Options "sameorigin"标头,我没有任何问题。但是,现在我需要在其他服务器上使用iframe,但令我惊讶的是,Chrome和Safari已弃用allow-from,因此无法使用X-Frame-Options

所以,我正在将标题切换到CSP,但我遇到了一些问题。

假设有两台服务器,XA(192.168.1.1)和XB(192.168.1.2)。 XA正在为一个包含一些图表的页面提供服务,XB正在为一个页面提供iframe到其中一个图表。

在XA中,我使用以下标题:Header set Content-Security-Policy "frame-ancestors 'self' 192.168.1.1"。但是,当我访问XB的网站时,iframe的内容未加载,因为它违反了CSP政策。

所以,我有两个问题:

1)政策在哪个方向运作? XA - > XB或XA< - XB?换句话说,192.168.1.1是正确的还是应该使用192.168.1.2?试过这两个并且没有用,但只知道哪个是正确的。

2)可能导致政策违规错误的原因是什么?

出于测试目的,XA和XB都只提供简单的HTML,没什么特别的。

XA

<html>
<body>
    lalala
</body>
</html>

XB

<html>
<body>
    <iframe src="http://192.168.1.1"/>
</body>
</html>

访问XB时浏览器的控制台错误:Refused to display 'http://192.168.1.1/' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' http://192.168.1.1".

1 个答案:

答案 0 :(得分:0)

没关系......刚刚发现造成问题的原因。

至于1)该政策需要指向192.168.1.2。

关于2)它没有用,因为XB是我的笔记本电脑,我把浏览器指向localhost。将Apache更改为在192.168.1.2而不是127.0.0.1上运行后,它运行了。