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

Jonathan Hao
Jonathan Hao

什么是专用网络访问?

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

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

  • 安全情境:只有安全情境才能发出专用网络子资源请求(自 Chrome 94 起强制执行)。如需了解详情,请参阅我们的专用网络访问更新博文
  • 预检请求:Chrome 会在专用网络子资源请求之前发送预检请求,以检查服务器权限(在开发者工具中针对自 Chrome 104 及 Chrome 版本开始出现故障时显示警告,在 Chrome 130 中强制执行)。具体说明请参阅专用网络访问:预检功能简介。从 Chrome 123 开始,如果系统因为 PNA 原因才创建和发送预检,那么 Chrome 将省略一些 CORS 标头,例如 Accept
  • 同源豁免:从 Chrome 115 开始,来自可能可信来源的同源请求不受 PNA 限制。

扩展保护:Web Worker

PNA 保护将扩展到 Web 工作器(专用工作器、共享工作器和 Service Worker)。其中包括:

  • 提取工作器脚本:对于不太公开的 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 Blurerdzicki 提供,由 Un 节点 提供