本帖最后由 杨童 于 2024-5-5 20:17 编辑
众所周知浏览器URL存在跨域问题,但本文介绍的跨域并不是指域名跨域,而是服务器IP跨域
本文将以实际案例举例说明IP跨域问题的场景、原因、注意事项、解决方案等
------------------------------------------------------------------------------------------------------------------------
实际案例举例: 问题背景: 用户使用零信任将企业门户等web业务系统发布为隧道资源,业务已正常运行一年多,但是近期突然发现某些业务网站中某些字段参数无法显示,如下图,某些发电量,台数等数值的显示不出来或为空
------------------------------------------------------------------------------------------------------------------------
排查过程: 1、通过f12检查浏览器访问过程,发现存在跨域报错但和正常跨域告警还不一样,报错内容如下: has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space private.
3、总结来看意思就是: 谷歌对浏览器内核加了新的规则,网页在调用其他服务器的内容时,会校验调用的服务器IP,如果当前访问的网站IP和网站内部调用的IP不属于同类型的IP就会报跨域
规则中将IP分为了三类: 当地:包含本地 仅限主机。换言之,每个目标都不同的地址 装置。
私人:包含 仅在当前网络中有意义的地址。在其他 字,其目标因网络位置而异的地址。
公共:包含所有 其他地址。换言之,目标相同的地址 IP 网络上的全球所有设备。
结合到当前客户业务来看,就可以分析出问题: 1、客户网站的服务器IP是零信任发布的隧道资源,IP为10.1.1.1(根据CORS规则属于私人地址块) 2、网站中如发电量等数值是调用了另一个隧道资源,这个隧道资源的服务器IP为10.1.1.2,但是开启了fake ip,开启了fake ip用户在访问对应资源时,实际访问的地址变成了198.18.0.5(属于本地地址块)
这样就导致出现了所谓的IP跨域,虽然网站服务器IP和内部调用的其他服务器资源的服务器IP都是私有的,但是因为其中一方开启了fake ip,就导致出现私人地址块的服务器从本地地址块调用资源的问题,从而触发了CORS规则
------------------------------------------------------------------------------------------------------------------------
关于此问题的临时解决方案(测试验证方案) 可在浏览器输入URL:chrome://flags (只要是谷歌内核的浏览器都可以,如下图会自动变成对应浏览器的页面) 搜索block,如下图,选择disable,然后重启浏览器重新访问业务即可,如果告警消除则证明就是IP跨域问题
------------------------------------------------------------------------------------------------------------------------
彻底解决方案 零信任发布资源时注意fake ip功能的开启和关闭 所有涉及web资源互相调用的资源都统一开启或关闭fake ip功能
|