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

Jonathan Hao
Jonathan Hao

什么是专用网络访问?

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

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

  • 安全上下文:只有安全上下文才能发出专用网络子资源请求(自 Chrome 94 起强制执行)。如需了解详情,请参阅我们的专用网络访问通道更新帖子
  • 预检请求:Chrome 会在专用网络子资源请求之前发送预检请求,以检查服务器权限(在 Chrome 104 中,如果自 Chrome 104 开始出现失败,会在开发者工具中发出警告,但在 Chrome 130 中会强制执行)。专用网络访问:预检简介中对此进行了介绍。从 Chrome 123 开始,如果预检仅因为 PNA 而创建和发送,Chrome 会省略一些 CORS 标头,例如 Accept
  • 同源豁免:自 Chrome 115 起,来自可能可信的来源的同源请求不受 PNA 限制的约束。

扩展保护:Web Worker

PNA 保护将扩展到网络工作器(专用工作器、共享工作器和 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

扩展保护:导航提取

PNA 也适用于导航提取(iframe、弹出式窗口),因为它们可能用于 CSRF 攻击。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 阻止先奇 Unsplash 用户