Content-Security-Policy标头存在并显示正确的设置,但仍收到拒绝的连接

时间:2021-03-13 作者:Tony Djukic

所以我把一个插件放在一起,它允许我用一个在线服务连接多个客户端站点。

我可以让服务供应商代码段加载,但一旦你与它交互,事情就会变得棘手,它拒绝加载(我猜)iframe。。。它的文档记录很差。

Refused to load https://www.service-domain.com/ because it does not appear in the frame-ancestors directive of the Content Security Policy.

这是我收到的控制台日志错误。

因此,我跳回插件并添加了以下内容:

function bbti_send_headers() {
    header( "Content-Security-Policy: frame-ancestors https://www.service-domain.com/; frame-src https://www.service-domain.com/;" );
}
add_action( \'send_headers\', \'bbti_send_headers\' );
现在,当我重新加载页面时,仍然会出现相同的错误Refused to load https://www.service-domain.com/... etc...

但是,如果我查看网络面板并检查页面标题,我会得到以下结果:

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Security-Policy: frame-ancestors https://www.service-domain.com/; frame-src https://www.service-domain.com/;
因此,标题已经存在,但仍然从脚本中得到相同的错误。

有人知道我错过了什么吗?

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

经过大量挖掘,错误消息的措辞似乎有点误导。

Refused to load https://www.service-domain.com/ because it does not appear in the frame-ancestors directive of the Content Security Policy.

上面没有澄清的是,这不是我正在处理的服务器/站点Refused 从供应商的域中加载,但这是供应商的财产Refused 将自己加载到我正在处理的域中。

上面的标题片段在任何人需要时都可以使用,但如果您看到特定的错误消息,请注意,受限制的是其他域,而不是您的域。

另一方面,问题源于这样一个事实,即工作正在开发/暂存域上进行,但当与供应商建立帐户/配置文件时,使用了当前的实时/生产域,因此我呼叫的域未列为正在验证的域,因此被阻止。

希望这对遇到类似问题的人有所帮助。