问题
在使用iframe进行嵌入时,一般会设置响应头frame-ancestors作为安全防护,但是实际生产工作中遇到很多问题,下面提供类似的解决方案
问题1
响应头IP泄露
这部分内容大多出现在内网应用+互联网应用双端应用。
一般我们设置响应头会使用frame-ancestors: ALLOW-FROM *.abc.com 1.2.3.4 5.6.7.8这类写法
但是此部分会出现暴露内网IP的问题,一般会被安全管理部门指出存在内网IP泄露
因此我们改换形式:
- 从请求头中的
Referer进行解析,如果Referer中地址为白名单范围内,则添加响应头frame-ancestors,否则直接返回403禁止访问 - 原则上禁止无
Referer访问
问题2
多层iframe嵌套
在多层iframe嵌套时,实测浏览器会校验每一个上级iframe的CSP是否合规
例如页面是a.com,其中嵌套了b.com,我们自己的页面c.com被b.com嵌套进去,那我们设置的frame-ancestors: ALLOW-FROM 必须同时包含a.com b.com,这种问题再应对问题1时会变得尤为困难,因为浏览器实际没有通过Referer带给我们最外层页面的地址,我们无法进行校验。
因此只能做关联绑定,如果Referer为b.com,那我需要同时设置两个地址