什么是专用网络访问?
专用网络访问(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 屏蔽导航请求时,用户会看到一条特定错误消息,其中包含手动重新加载和允许请求的选项。
如果您的网站受到影响,该怎么办?
专用网络访问:介绍预检一文中提供了相关指南。请务必注意,对于导航请求:
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 节点 提供