起因

在 CodeReview 时候,发现请求报错,还以为后端环境又坏了(调试环境-囧),查了下页面报错如下

Access to XMLHttpRequest at ‘10.120.xxx’ from origin ‘http://xxx’ has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space private.

这段英文表示 “因为违反了跨域策略所以请求被阻止了,因为这次请求不是 https 的,并且请求的地址是 private 的”原来不是环境问题,是被 chrome 阻止了

请求报错的产生总结:

  • CORS 跨域请求
  • 更新到 Chrome 94 版本以上
  • 请求了不安全的 http 的内网 ip 地址

Chrome 94 更新

上面错误提示中说了 CORS “跨域请求”,在 94 版本后,使用跨域请求需要满足两个条件之一即可

  • 也就是 https 的请求
  • 非 private 的 http 请求

那为什么要这样做呢?我们先查阅下 Chrome 的更新记录

google chrome 历史版本更新日志en.wikipedia.org/wiki/Google…

从图中看到新增了 “Restriction of private network requests for subresources to secure contexts” 也就是 “限制针对私有网络的资源请求”

谷歌的开发者解释了加入这层限制的原理 developer.chrome.com/blog/privat…

从这篇文章中,终于了解到了本次更新的原因。针对于 private network,加入了 W3C deprecation 的试用草案

wicg.github.io/private-net…

该草案描述了 private network 的访问条件。草案的目的是为了防止 CSRF 攻击,

CSRF 私有网络攻击

谷歌开发者的文中声称,有数十万人遭受了针对私有网络的 CSRF 攻击。从这里看到,Chrome 多次提示了 private network 私有网络。那什么是私有网络攻击呢?简单说,就是你打开一个公共的网站,这个网站里会去请求你内网里的地址(例如192.168.1.3/xx),在以前是可以被允许的,但是这带来了隐患,假设你们公司内网有个网站提供了机密信息,现在就会恶意访问到。

sequenceDiagram
企业员工A->>公共网站: 打开
公共网站->>企业内网: 请求192.168.1.3/xx
企业内网->>公共网站: 企业机密信息被窃取了 

实际测试

假设有一 internal.cominternal.com 的域名对应于内网IP 10.x.x.x

页面协议页面内的请求协议示例结果
httphttp页面是www.xx.com 其中ajax请求是 internal.com失败
httphttps页面是www.xx.com 其中ajax请求是 internal.com成功
httpshttps页面是www.xx.com 其中ajax请求是 internal.com成功

也就是说,如果 ajax 的地址是内网的 IP,此时必须是 https 才可以,http 的就会失败

原理剖析

参考 wicg.github.io/private-net…

地址块姓名参考地址空间
127.0.0.0/8IPv4 环回[RFC1122]当地的
10.0.0.0/8私人使用[RFC1918]私人的
172.16.0.0/12私人使用[RFC1918]私人的
192.168.0.0/16私人使用[RFC1918]私人的
169.254.0.0/16链接本地[RFC3927]私人的
::1/128IPv6 环回[RFC4291]当地的
fc00::/7独特的地方[RFC4193]私人的
fe80::/10链路本地单播[RFC4291]私人的
::ffff:0:0/96IPv4 映射[RFC4291]查看映射的 IPv4 地址

这些地址都会认为是私有地址,当 Chrome 解析到请求是这些私有地址的时候,就会禁止

解决方案

方案1 关闭检查

打开浏览器,进入chrome://flags/页面搜索Block insecure private network requests设置为Disabled,Relaunch就好了

方案2 使用 https

给内网地址映射一个 https 的地址

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐