Chrome 94新增的跨域策略深层次解读

你是否遇到过这样的问题:以前一个运行得好好的系统,突然在某个时刻(2021年9月21日之后)用户反馈说用不了了。如果用户允许你F12进行网络交互或者控制台输出查看时,你会发现这样的错误:

Access

to XMLHttpRequest at 'http://[some_url]' from origin

'http://[some_url]' has been blocked by CORS policy: The request client

is not a secure context and the resource is in more-private address

space 'private'.

然后请求就中断了,后续的逻辑自然也就没办法进行了。乍一看是跨域策略(CORS policy)的问题,赶紧去看看接口的Response Header与跨域相关的配置:

Access-Control-Allow-Origin: *

Access-Control-Allow-Headers: X-Requested-With, Content-Range, Content-Type

Access-Control-Expose-Headers: Range

和跨域相关的配置也都返回了(要不然以前的系统也不能正常地运行),怎么突然就报错了呢?如果你遇到了相同的疑问,那么这篇文章就继续读下去吧。

复现问题

首先,你操作的业务系统,其域名一定指向的是一个公网IP地址。这里我们假设名为"out.com";

其次,在上述业务系统中调用了另外一个系统的接口,该子系统域名指向的是一个内网IP(无论A类B类还是C类子网)地址(localhost, 127.*.*.*, [::1]除外)。这里我们假设名为“in.com”。

最后,一定是上述两个系统都采用http协议进行访问。

举个例子*:

ping out.com

来自 110.242.68.66 的回复: 字节=32 时间=12ms TTL=48

ping in.com

来自 10.29.10.136 的回复: 字节=32 时间=12ms TTL=48

操作页面:http://out.com/article/process,在该页面中有如下JS:

复制 $.ajax({url:"http://in.com/api/auditors", method:"GET", success:function(ret) {}}) 1.

那么此时就会复现文章开头描述的问题。

*注:以上数据经过脱敏处理,所涉及域名和IP地址并非真实数据,仅供内容阐述之用。

问题原因

为什么升级到Chrome 94开始就有问题了呢?在这一版中,它禁止了公共非安全上下文(广义上说,不通过 HTTPS 或来自私有 IP 地址的网站)向私有网络发出请求。听起来很难理解。让我们抽出这句话的关键词:公共上下文 / 请求 / 私有网络。

这里不得不聊一下现在的网络应用背景。越来越多的家庭出现了嵌入式设备。而这些设备的安全性普遍都不是很高。仅仅提供一个简单的http配置界面给用户。如果访问了一个外网别有用心的网页,里面被嵌入了一个内网的ajax请求,那么这些家庭中的嵌入式设备就很容易遭到攻击。下面是我总结的一张表格,含义是外网资源采用不同的协议访问内网资源时的组合情况。

外网访问内网

http

https

http

Chorme 94禁止

Chorme 94禁止

https

安全内容加载不安全内容,禁止

取跨域策略

这里可以给大家举个例子。部分型号的TP-Link路由器,为了方便用户进行配置,只要连接上(通过有线或者无线),浏览器输入:tplogin.cn就可以自动打开管理界面(域名自动解析到默认网关)。在Chrome 94之前,当用户打开了一个“精心设计”的http页面,内部编写了一套针对tplogin.cn的攻击JS。那么处于内网的路由器就有被侵入的风险。

其实由此可以联想到现在的智能手机,在iOS中,如果应用需要网络权限,用户可以选择蜂窝和无线网络,而无线网络又可以选择是否允许访问本地网络。此功能与Chrome本次的跨域策略升级其实是基于同样的考量。

解决方法

方案一:同时升级外部系统和内部系统,都采用https协议访问;

方案二:如果你有权限控制外部系统,让外部系统在公司内网中也解析为内网地址。

如果你不得不采用http方式访问(例如:没有对应的https证书),那么用户可以在浏览器中禁用掉这一策略。在chrome中打开此地址:

chrome://flags/#block-insecure-private-network-requests

将Block insecure private network requests配置禁用掉(Disable)。但是一定要注意,修改了配置后必须点击Chrome此时在右下角出现的“重启”(Restart)按钮才能生效。自己主动关闭浏览器全部页面再打开是不会触发Chrome更新配置的。

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

猜你还会喜欢下面的内容

    无相关信息

中国领先的互联网域名及云服务提供商

为您提供域名,比特币,P2P,大数据,云计算,虚拟主机,域名交易最新资讯报道

域名注册云服务器