Local Network Access

LNA 是 chrome 从 142 版本开始默认启用的一个功能,简单来说,LNA 出于保护本地服务的目的,会阻拦公网网站向本地网络发起的请求。本地网络的概念可以参考这个链接

一些参考资料:

chrome blog

chrome status

LNA Adoption Guide

flowchart TD A[公网网站页面] -->|发起请求| B[请求本地网络服务] B --> C{LNA 策略生效?} C -->|否| D[请求成功] C -->|是| E{是否允许 local-network-access?} E -->|允许| D E -->|拒绝或未授予| F[请求被阻止
显示权限提示框或错误信息]

如上图所示,当公网页面尝试访问本地网络服务时,Chrome 会根据 LNA 策略判断是否需要拦截,并根据用户是否授予 local-network-access 权限来决定请求最终是否能被执行。

一般来说,在公司内部有不少系统都会受到这个策略的影响。当前可以分为几种情况。

举个最简单的例子,公司内部会用到飞书的 SSO 授权登录,当飞书登录成功后会回调回来内部系统的网站,内部系统的网站是部署在 172 网段的,这就是一个很典型的外网访问内网请求的 case。在 chrome 142 版本后,这种情况就会被 LNA 阻拦掉,现象如下:

提示「此连接已被阻止,因为它是公共页面发起的,旨在连接到您本地网络上的设备或服务器」。

我们可以在采用指南上找到如下描述:

针对这种情况,我们需要将内网地址和外网地址都部署在 https 下,然后给 iframe 添加 allow="local-network-access" 相关属性,此时当再次发生跳转的时候,就会弹出提示请求权限:

此时只要用户允许了这个权限,我们就能和以前一样正常进行跳转。但如果用户拒绝了,跳转将被阻止,出现和上面一样的错误。

资源请求

针对一些资源的请求(image/video等)和 fetch 请求,也会被 LNA 限制。

和上面聊到的一样,当发起此类请求的时候会有权限请求的提示框,如果权限没有被授予,此类请求就会被禁止请求,并在控制台中显示 CORS 错误。

最佳实践

针对用户权限请求,和其他权限(麦克风、定位等)请求一样,我们需要在用户请求前给予提示,引导用户允许请求,如果判断到用户拒绝了权限,也做一个优雅的降级,阻断当前行为并提示用户这个权限的重要性,并告诉用户如何重置权限(因为当前浏览器并没有提供编程式重置权限的途径,需要用户手动重置)。

这相关的内容在 web 体验优化相关的文章中会提到,可以自行展开研究。

由于 LNA 一般影响面最大在企业内部,企业也可以通过策略的方式,调整 LocalNetworkAccessAllowedForUrlsLocalNetworkAccessBlockedForUrls 两个参数来针对性的开放或拦截。使用通配符的方式,可以一次性将公司的二级域名都匹配上,一次性解决问题。

临时的解决方案也可以通过访问 chrome://flags,将 Local Network Access Checks 这一项 disabled 掉,也能临时解决问题。但是建议还是针对 LNA 做相关的适配,也许以后这个功能就常驻开放了。


总的来说,LNA 这个功能的出发点是好的,针对大多数普通浏览器用户可以有效地减少被攻击的可能性,对于有可能遭受影响的企业用户,也有提供对应的解决方案去解决,就是需要开发者针对这个 case 来进行一些适配,作为开发者的我们可以多关注一下 chrome 的一些新特性,等到用户反馈遇到情况再去修复就晚啦。

相关推荐
代码匠心16 小时前
AI 自动编程:一句话设计高颜值博客
前端·ai·ai编程·claude
_AaronWong17 小时前
Electron 实现仿豆包划词取词功能:从 AI 生成到落地踩坑记
前端·javascript·vue.js
cxxcode17 小时前
I/O 多路复用:从浏览器到 Linux 内核
前端
用户54330814419418 小时前
AI 时代,前端逆向的门槛已经低到离谱 — 以 Upwork 为例
前端
JarvanMo18 小时前
Flutter 版本的 material_ui 已经上架 pub.dev 啦!快来抢先体验吧。
前端
恋猫de小郭18 小时前
AI 可以让 WIFI 实现监控室内人体位置和姿态,无需摄像头?
前端·人工智能·ai编程
哀木18 小时前
给自己整一个 claude code,解锁编程新姿势
前端
程序员鱼皮18 小时前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
UrbanJazzerati18 小时前
Vue3 父子组件通信完全指南
前端·面试
是一碗螺丝粉18 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain