1、问题点:
其他平台项目使用免登录方式嵌入我们平台,被拒绝。
Refused to frame 'http://192.168.0.24:8886/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self'".
2:前端嵌入iframe 时,有时汇报安全策略如下:
in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors ‘self’。
这里主要是 frame-ancestors的参数需要调整。
# 不允许被嵌入,包括<frame>, <iframe>, <object>, <embed> 和 <applet>
Content-Security-Policy: frame-ancestors 'none'
# 只允许被同源的页面嵌入
Content-Security-Policy: frame-ancestors 'self'
# 只允许被白名单内的页面嵌入
Content-Security-Policy: frame-ancestors www.example.com
3:解决
这个问题明显是NGinx配置可以解决,加入白名单。问题在修改后一直不生效。这里要注意测试浏览器缓存和本地cookie。通过以下修改可以解决
在nginx的 nginx.conf 的http或者service 加入安安全策略
add_header X-Frame-Options "ALLOW-FROM http://10.0.0.22:9999/";
add_header Content-Security-Policy "frame-ancestors http://10.0.0.22:9999/";
如果不想其他平台使用iframe嵌入我们自己的平台,则配置如下
add_header Content-Security-Policy "default-src * data: 'unsafe-inline' blob: 'unsafe-eval';frame-src 'self'; frame-ancestors 'self' http://*";
3:重新加载Nginx的配置文件
nginx -s reload