发布时间:2025 年 6 月 9 日
Chrome 正在为根据本地网络访问规范连接到用户本地网络的网站添加新的权限提示。此举旨在保护用户免遭针对专用网络上的路由器和其他设备的跨站请求伪造 (CSRF) 攻击,并降低网站利用这些请求对用户本地网络进行指纹识别的能力。
为了了解此变更对 Web 生态系统的影响,Chrome 团队正在征求开发者的反馈意见。这些开发者构建的 Web 应用依赖于与用户本地网络或用户机器上本地运行的软件建立连接。从 Chrome 138 开始,您可以前往 chrome://flags/#local-network-access-check
并将相应标志设置为“已启用(阻止)”,选择启用这些新限制。
什么是本地网络访问权限?
本地网络访问权限会限制网站向用户本地网络中的服务器(包括在用户机器上本地运行的服务器)发送请求的能力,要求用户先向网站授予权限,然后才能发出此类请求。只有安全上下文才能请求此权限。

许多其他平台(例如 Android、iOS 和 MacOS)都具有本地网络访问权限。例如,您可能在设置新的 Google TV 和 Chromecast 设备时,向 Google Home 应用授予了此权限,以允许其访问本地网络。
哪些类型的请求会受到影响?
在本地网络访问权限的第一个里程碑中,我们认为“本地网络请求”是指从公共网络向本地网络或环回目标地址发出的任何请求。
本地网络是指解析为 RFC1918 第 3 节中定义的 IPv4 专用地址空间的任何目的地(例如,192.168.0.0/16
)、映射的 IPv4 地址本身为私有地址的 IPv4 映射 IPv6 地址,或 ::1/128
、2000::/3
和 ff00::/8
子网之外的 IPv6 地址。
环回是指解析为以下地址空间的任何目的地:RFC1122(IPv4)第 3.2.1.3 节中定义的“环回”空间 (127.0.0.0/8
)、RFC3927(IPv4)中定义的“链路本地”空间 (169.254.0.0/16
)、RFC4193(IPv6)第 3 节中定义的“唯一本地地址”前缀 (fcc00::/7
),或 RFC4291(IPv6)第 2.5.6 节中定义的“链路本地”前缀 (fe80::/10
)。
如需查看 IP 地址与地址空间的完整映射,请参阅本地网络访问规范中的表格。
公共网络是指任何其他目的地。
由于本地网络访问权限仅限于安全上下文,并且将本地网络设备迁移到 HTTPS 可能很困难,因此,如果 Chrome 在解析目的地之前知道请求将发送到本地网络,则受权限限制的本地网络请求现在将免于混合内容检查。如果满足以下条件,Chrome 便知道请求将发送到本地网络:
- 请求主机名是专用 IP 字面值(例如
192.168.0.1
)。 - 请求主机名是
.local
网域。 fetch()
调用带有targetAddressSpace: "local".
选项的注释
// Example 1: Private IP literal is exempt from mixed content.
fetch("http://192.168.0.1/ping");
// Example 2: `.local` domain is exempt from mixed content.
fetch("http://router.local/ping");
// Example 3: Public domain is not exempt from mixed content,
// even if it resolves to a local network address.
fetch("http://example.com/ping");
// Example 4: Adding the `targetAddressSpace` option flags that
// the request will go to the local network, and is thus exempt
// from mixed content.
fetch("http://example.com/ping", {
targetAddressSpace: "local",
});
Chrome 中的变化
Chrome 138
我们已在 Chrome 138 中推出本地网络访问权限的初始版本,供您选择加入并进行测试。用户可以将 chrome://flags#local-network-access-check
设置为“已启用(阻塞)”,以启用新的权限提示。这支持为使用 JavaScript fetch()
API、子资源加载和子框架导航发起的请求触发本地网络访问权限提示。
我们提供了一个演示网站,网址为 https://lna-testing.notyetsecure.com/,用于触发不同形式的本地网络请求。
已知问题和限制
- 与本地网络的 WebSocket (crbug.com/421156866)、WebTransport (crbug.com/421216834) 和 WebRTC (crbug.com/421223919) 连接尚未受 LNA 权限的限制。
- 来自 Service Worker 和 Shared Worker 的本地网络请求要求 Worker 的来源之前已获得本地网络访问权限。
- 如果您的应用从服务工作线程发出本地网络请求,您需要从应用中单独触发本地网络请求,才能触发权限提示。(我们正在努力让工作者在有有效文档可用时触发权限提示 - 请参阅 crbug.com/404887282。)
Chrome 139 及更高版本
我们的目标是尽快发布本地网络访问权限。考虑到某些网站可能需要额外的时间来更新本地网络访问权限注释,我们将添加一项源试用,以便网站在默认启用本地网络访问权限之前暂时选择不遵守安全上下文要求。这应能为开发者提供更清晰的迁移途径,尤其是当您依赖于通过 HTTP 访问本地网络资源时(因为如果从尚不支持本地网络访问混合内容豁免的浏览器中的 HTTPS 页面请求这些资源,这些请求会被阻止,因为它们属于混合内容)。
我们还将添加一项 Chrome 企业政策,用于控制哪些网站可以发出本地网络请求,哪些网站不可以(预先向这些网站授予或拒绝相应权限)。这样一来,受管理的 Chrome 安装(例如公司环境中的 Chrome 安装)就可以避免针对已知的预期使用情形显示警告,或者进一步锁定并阻止网站请求该权限。
我们计划继续将“本地网络访问权限”与可向本地网络发送请求的不同功能相集成。例如,我们计划很快推出适用于 WebSocket、WebTransport 和 WebRTC 连接的本地网络访问权限。
随着我们越来越接近在 Chrome 中全面推出本地网络访问功能,我们将分享更多相关信息。
欢迎提供反馈
之前有关专用网络访问权限开发的反馈对我们非常有价值,引导我们采用了新的本地网络访问权限方法。我们要再次感谢多年来参与其中的所有人。
如果您开发或使用依赖于与用户本地网络或用户机器上本地运行的软件建立连接的网站,Chrome 团队很希望了解您的反馈和使用情形。您可以采取以下两种做法来提供帮助:
- 前往
chrome://flags#local-network-access-check
,将该标志设置为“已启用(阻塞)”,然后查看您的网站是否正确触发了新的权限提示(并在您授予权限后按预期运行)。 - 如果您遇到任何问题或有任何反馈,请在 Chromium 问题跟踪器中提交问题,或在我们的 LNA 规范 GitHub 代码库中提交问题。 Chrome 非常期待收到您的反馈。