禁用网络安全后的私有网络访问问题:请求没有目标IP地址空间,但资源位于本地地址空间。

14
我们在公共站点上拥有一个测试环境。在手动测试阶段,我们在Chrome浏览器上使用--disable-web-security标志使测试人员可以绕过CORS错误进行公共服务调用。同时,我们在代理机器上有来自本地主机的请求。然而,今天随着Chrome 98的更新,我们开始遇到针对本地主机的网络请求出现问题。
我们从公共站点发起了本地主机请求时出现了以下错误: Access to XMLHttpRequest at 'https://localhost:3030/static/first.qjson' from origin 'https://....com' has been blocked by CORS policy: Request had no target IP address space, yet the resource is in address space `local`. 本地主机上的站点已配置为返回Access-Control-Allow-* CORS头,包括“Access-Control-Allow-Private-Network: true”。
我没有看到任何预检请求,只有一个带有CORS错误的GET请求。
我们怀疑这可能是通过--disable-web-security禁用Web安全性引起的副作用。这可能会阻止获取目标IP地址空间。我们的假设基于https://wicg.github.io/private-network-access/中的CORS预检部分。
引用如下: 3.1.2. CORS预检 HTTP提取算法应进行调整,以确保在从安全上下文启动的所有私有网络请求上触发预检。这里的主要问题再次是,在CORS-preflight fetch下层的HTTP-network fetch中,响应的IP地址空间直到建立连接后才能知道。

那么,有人知道如何在使用 --disable-web-security 标志时解决私有网络访问的问题吗? 或者我们漏掉了什么。感谢您的帮助。


2
昨天有同样的问题在这里 - T.J. Crowder
为什么不修复原始的CORS问题,而要使用 ---disable-web-security(这不是可持续的做法)? - jub0bs
@jub0bs 是的,那也是一种合法的方法,我们也向后端团队提供了指导,但你可以想象有多少个团队需要这样做。因此,我们正在寻找是否有任何解决方法。 - Alper Batıoğlu
@AlperBatıoğlu 哪个更糟?咬紧牙关一次性正确设置CORS,还是要求同事禁用浏览器安全并将他们置于风险中? - jub0bs
1
@jub0bs,我完全同意你的观点。我刚刚参加了一个关于这个问题的热门会议,我们再次领导团队解决CORS问题。但是你知道,简单的解决方案更容易被采用。然而,由于--disable-web-security仍然是一项功能,并且该功能的用户仅用于测试目的,我们正在寻找是否存在任何解决方法。目前,测试浏览器已经降级。 - Alper Batıoğlu
2个回答

14

以下步骤可以帮助解决Chrome 98的问题,对于类似Chrome的Edge浏览器,您需要执行类似操作。

MAC系统

  • 对于Chrome 98版本的Requestly,您需要按照以下步骤操作:在终端中运行以下命令:

    defaults write com.google.Chrome InsecurePrivateNetworkRequestsAllowed -bool true

  • 重新启动您的浏览器,如果还无法解决问题,则重启您的计算机。

WINDOWS系统

  • 运行 'regedit' 打开Windows注册表(如果权限问题,请使用管理员命令提示符运行该命令)
  • 进入 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome
  • 创建名为 "InsecurePrivateNetworkRequestsAllowed" 的新DWORD值
  • 将值更改为 "1"
  • 重新启动您的浏览器

1
两个注意点:
  • 没有键"HKLM\SOFTWARE\Policies\Google\Chrome",但创建后就可以工作了。就是这样。
  • 还有另一个键"InsecurePrivateNetworkRequestsAllowedForUrls"用于特定url的要求。->https://developer.chrome.com/blog/private-network-access-update/ 管理员可以进行安排。谢谢。
- Alper Batıoğlu
使用...Urls的示例如下:[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\InsecurePrivateNetworkRequestsAllowedForUrls] "1"="https://[.]source.com/" - pposada
有人能解释一下这为什么有效吗?我安装了VPN应用,但没有启动它。为什么我在使用“Chrome 98私人网络访问”时仍然会遇到CORS错误? - Junior Tour
不再起作用了。最终我使用https://github.com/FiloSottile/mkcert创建了一个可信的自签名证书。 - Nitin
Chrome最近发布了102版本,实施了新的CORS私有网络访问要求。如果您有一个公共应用程序调用私有IP块上的api,例如10.x.x.x或192.x.x.x,则会失败。这个Windows的答案为我解决了错误。 - Mike
对于我的Windows系统,将InsecurePrivateNetworkRequestsAllowed添加为“可扩展字符串值”即可完成任务(值设置为true)。 - erwanlfrt

3

LINUX

对于Linux用户,您需要在以下路径中创建策略文件:

mkdir -p /etc/chromium/policies/managed

# for chrome you should change the path to this
# /etc/opt/chrome/policies/managed

接着,创建一个新的JSON文件来存储策略:

cd /etc/chromium/policies/managed
touch dev_policy.json

并将此内容放入其中:

{
"InsecurePrivateNetworkRequestsAllowed": 1
}

对于 Chrome:

{
"InsecurePrivateNetworkRequestsAllowed": true
}

就是这样,下次在您的计算机上启动 Chrome 时,它将加载这些新策略。

p.s. 您可以在此处检查策略是否正确加载:chrome://policy/


1
我不得不使用“true”才能使其正常工作,而不是使用“1”。 - Asce4s
厉害,我猜你用的是Chrome,而不是Chromium,对吧? - Ehsan Nouri
是的.. 在Chrome上。 - Asce4s
1
注意:如果您通过 snap 包使用 Chromium,则策略配置文件的路径应为 /etc/chromium-browser/policies/managed/dev_policy.json - SergA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接