阅读 172

Chrome 94 CORS private adress 问题

起因

在 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…

image.png

从图中看到新增了 “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),在以前是可以被允许的,但是这带来了隐患,假设你们公司内网有个网站提供了机密信息,现在就会恶意访问到。

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

实际测试

假设有一 internal.com 和 internal.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 的地址


作者:在冬天飞
链接:https://juejin.cn/post/7031129079277420557


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐