什么是专用网络访问?
专用网络访问(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 屏蔽导航请求时,用户会看到特定错误,并可以选择手动重新加载并允许相应请求。
如果您的网站受到影响该怎么办?
专用网络访问:简介预检一文包含相关指南。对于导航请求,请务必注意以下几点:
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 用户