专用网络访问:针对 Web Worker 和导航提取的扩展保护

Jonathan Hao
Jonathan Hao

什么是专用网络访问?

专用网络访问 (PNA,以前称为 CORS-RFC1918,简称“本地网络访问”)是一项安全功能,用于限制网站向专用网络上的服务器发送请求的功能。这有助于保护用户和内部网络免受跨站请求伪造 (CSRF) 等潜在攻击。Chrome 一直在逐步实现 PNA,并将在即将发布的版本中扩大保护范围。

主要 PNA 保护措施(及其当前状态)

  • 安全情境:只有安全情境才能发出专用网络子资源请求(自 Chrome 94 起强制执行)。如需了解详情,请参阅我们的“专用网络访问”更新博文
  • 预检请求:Chrome 会在专用网络子资源请求之前发送预检请求,以检查服务器权限(自 Chrome 104 起,如果失败,开发者工具中会显示警告;Chrome 130 中将强制执行此操作)。专用网络访问:介绍预检中介绍了这一点。从 Chrome 123 开始,如果预检仅因 PNA 而创建并发送,Chrome 会忽略一些 CORS 标头,例如 Accept
  • 同源豁免:从 Chrome 115 开始,来自可能可信来源的同源请求不受 PNA 限制。

扩展保护:Web Worker

PNA 保护功能将扩展到网络工作器(专用工作器、共享工作器和服务工作器)。其中包括:

  • 提取工作器脚本:对于不太公开的 IP 地址,需要安全上下文和预请求。从 Chrome 110 开始显示警告,并将在 Chrome 130 中强制执行。
  • 由工作器脚本发起的提取:工作器脚本中的所有提取都遵循相同的 PNA 规则。

从 Chrome 124 开始,您可以按照以下步骤测试强制执行:

  • 停用 chrome://flags/#private-network-access-ignore-worker-errors
  • 启用 chrome://flags/#private-network-access-respect-preflight-results

扩展保护:导航提取

由于导航提取(iframe、弹出式窗口)可能会用于 CSRF 攻击,因此也适用于 PNA。Chrome 123 开始显示失败警告,Chrome 130 计划开始强制执行。

从 Chrome 124 开始,您可以通过以下方式测试强制执行:

  • 停用 chrome://flags/#private-network-access-ignore-navigation-errors
  • 启用 chrome://flags/#private-network-access-respect-preflight-results

当 PNA 屏蔽导航请求时,用户会看到一条特定错误消息,其中包含用于手动重新加载并允许请求的选项。

当 PNA 屏蔽导航请求时,用户会看到一条特定错误消息,其中包含用于手动重新加载和允许请求的选项。
当 PNA 阻止导航请求时,用户会看到一条特定错误消息,其中包含手动重新加载和允许请求的选项。

如果您的网站受到影响,该怎么办?

专用网络访问:引入预检一文提供了相关指南。请务必注意,对于导航请求:

  • Access-Control-Allow-Origin 不能是通配符 ("*")。
  • Access-Control-Allow-Credentials 必须设置为 "true"

后续操作

  • WebSockets:从 Chrome 126 开始,PNA 暂时将涵盖 WebSocket 握手(先发出警告)。
  • 全面强制执行:Chrome 130 将暂时强制执行所有 PNA 限制(屏蔽不合规的请求)。用户将可以通过网站设置为受信任网站替换 PNA。

针对专用网络用例的反馈

如果您在专用网络上托管网站,并且需要来自公共网络的请求,Chrome 团队希望您提供反馈!请在 Chromium 问题跟踪器中提交问题(组件:Blink>SecurityFeature>CORS>PrivateNetworkAccess)。

照片由 Jakub Żerdzicki 拍摄,选自 Unsplash