不安全公共网站的对私有网络的请求

一、问题现象:

二、问题原因:

从 Chrome 94 开始,禁止公共非安全上下文(广义上说,不通过 HTTPS 或来自私有 IP 地址的网站)向私有网络发出请求

受影响的请求包括

从公共网络到私有网络的请求

从专用网络到本地网络的请求

从公共网络到本地网络的请求

chrome版本更新历史

对应chrome配置:

Block insecure private network requests

官方链接

developer.chrome.com/blog/privat...

web.dev/cors-rfc191...

引入预检声明developer.chrome.com/blog/privat...

三、问题定位

1、检查代理

关闭本地所有代理,出现改问题

打开本地代理,改问题消失,可以推测与网络环境有关

2、关闭代理的情况下检查本地配置

本地host文件中配置了域名对应ip,这个ip是私有ip,访问该ip时符合从公共网络到私有网络的请求,被chrome规则拦截

3、问题解决

修改本地host配置

四、判断网站是否受到影响

从 Chrome 98 开始,如果检测到私有网络请求,则会在其前面发送预检请求。如果此预检请求失败,仍会发送最终请求,但会在 DevTools 问题面板中显示警告。

五、类似问题官方推荐解决方案:

解决方案1:

注册弃用试用版

注册弃用试用版,并配置 服务器以Origin-Trial: $token在响应上附加特定于源的标头

缺点:

该方案最多使用到chrmoe102

解决方案2:

启用策略

更新客户端策略重新启用已弃用的功能

缺点

需要在用户客户端进行操作

解决方案3:

升级为HTTPS

通过 HTTPS 为私有网站提供服务的主要问题是公钥基础设施证书颁发机构 (PKI CA) 仅向具有公共域名的网站提供 TLS 证书。要解决此问题:

  1. 注册一个公共域名(例如intranet.example)并发布将该域名指向您选择的公共服务器的 DNS 记录。
  2. 获取 TLS 证书intranet.example。
  3. 在您的专用网络中,配置 DNS 以解析intranet.example到目标服务器的专用 IP 地址。
  4. 配置您的私人服务器以将 TLS 证书用于intranet.example. 这允许您的用户访问位于 的私有服务器intranet.example。

优点

chrome推荐的面向未来的解决方案

缺点:

1、需要申请和购买证书,

2、需要将现有http服务升级至https

解决方案4

反向嵌入

从私有服务器提供应用程序的骨架,然后从公共服务器(例如 CDN)获取其所有子资源(例如脚本或图像)

缺点:

1、需要重新搭建部署的网络环境

2、chrome声明未来可能会改变

解决方案5

CORS 预检请求

developer.chrome.com/blog/privat...

chrome98中专用网络访问的新增功能

为预检请求引入了一对新的请求和响应标头:

  • Access-Control-Request-Private-Network: true在所有 PNA 预检请求上设置
  • Access-Control-Allow-Private-Network: true必须在所有 PNA 预检响应上设置

无论请求方法和模式如何,都会为所有专用网络请求发送 PNA 的预检请求。它们在cors模式以及no-cors所有其他模式中的请求之前发送。这是因为所有私网请求都可以用于 CSRF 攻击,无论请求模式如何,以及响应内容是否对发起者可用

问题:

预检请求模式目前已被回滚,暂时无法使用

备注:

专用网络请求是目标服务器的 IP 地址比请求发起者获取的 IP 地址更私密的请求。例如,从公共网站 ( example.com) 到私人网站 ( router.local) 的请求,或从私人网站到 localhost 的请求。

图示:

相关推荐
Csvn5 小时前
OpenSpec 详细使用教程
前端
之歆6 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
云水一下7 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是7 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
冬奇Lab7 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
zhangyao9403308 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
kjs--8 小时前
浏览器书签执行脚本
前端
之歆8 小时前
Day16_JavaScript 轮播图与事件工程实战(下篇)
服务器·开发语言·前端·javascript·网络·性能优化
沄媪8 小时前
CSRF 跨站请求伪造
前端·ctf·csrf
kyriewen9 小时前
我关掉了Copilot:因为我写的代码出现在了别人的建议里
前端·javascript·ai编程