Nuxt 4.6.3:修掉三个 dev server 漏洞,外加 dot segment 路径处理
Nuxt v4.6.3 于 2026-10-27 发布,是 patch release。Security fixes 一节共列五项,其中三项直接落在 Vite dev server 上,一项是请求路径里的 dot segment 处理,剩下一项是页面 island 的重定向路由规则。
安全修复清单
- vite: do not read files named in client error reports (63299e13c) — GHSA-x287-wcfc-q46c
- vite: deny dev server access to nitro dev output (c7e204ec6) — GHSA-648h-gw55-m2g7
- vite: deny serving generated app secret in dev (16dfdc2a9) — GHSA-3xf4-9g3c-4h4w
- nitro,nuxt: handle dot segments in request paths (440250d97) — GHSA-9v7c-q64q-vv33
- nuxt: apply redirect route rules to page islands (b20372dbe) — GHSA-2fxj-c3j7-rr69
三个 dev server 相关修复
客户端错误报告不再被用来读文件(GHSA-x287-wcfc-q46c)
Vite 的客户端错误上报机制会带上出错位置相关的信息,dev server 侧据此定位源码。4.6.3 之前,这份上报里出现的文件名会被 dev server 当真去读取。修复后,客户端错误报告中点名的文件不再被读取。
这类问题的典型暴露面是本地开发环境:dev server 通常监听 localhost,但开发者可能开了 host: 0.0.0.0,或在共享机器、容器、远程开发机上跑 dev。如果你属于这类用法,升级比换端口更直接。
dev server 拒绝访问 nitro dev 输出(GHSA-648h-gw55-m2g7)
Nuxt 在 dev 下会由 Nitro 产出中间文件(在 .nuxt 目录一带)。修复后 dev server 明确拒绝访问 nitro 的 dev 输出目录,避免这些中间产物被当成普通静态资源对外提供。
dev 环境下不再下发 app 密钥(GHSA-3xf4-9g3c-4h4w)
4.6.0 引入了根应用密钥 runtimeConfig.appSecret,通过 NUXT_APP_SECRET 设置,模块由它派生用途专用的密钥。构建时不会生成该密钥;开发环境下会自动生成,并给出警告提示。
问题出在“生成之后”:dev server 有可能把这份生成的 app secret 当作文件发出去。4.6.3 的修复是 dev 环境下拒绝下发该密钥。要注意的是,这个警告本身是设计的一部分——dev 下自动生成密钥是为了让 session 之类的功能开箱可用,正式环境仍应显式提供 NUXT_APP_SECRET。
dot segment 路径处理(GHSA-9v7c-q64q-vv33)
nitro,nuxt: handle dot segments in request paths 处理的是请求路径中的 . 与 .. 段。这类路径在规范化时容易和实际路由匹配、文件解析产生分歧,不同层各自解释一遍就可能走到预期之外的位置。修复落在 nitro 与 nuxt 两侧,属于请求入口处的统一处理,和前面三个纯 dev server 的问题不同,这一项对生产部署同样有影响。
同版本的性能改动
- vite: skip compiling plain style blocks in the server build (#36711)
- nitro,nuxt,rspack,webpack: bundle esm vue + reuse caches (#36710)
- vite: avoid quadratic nested dir check for fs.allow (#36702)
- nuxt: server render internal custom links without RouterLink (#36707)
- nuxt: skip unneeded typed routes generation (#36645)
4.6.0 的背景:server 层与 CLI
Nuxt 4.6.0 于 2026-10-05 发布,420+ commits。核心是 nuxt/server:server 代码不再直接依赖 h3 与 nitropack 的类型,改由 Nuxt 自己定义 request event、route rules、typed $fetch 的类型,并新增 import 源 nuxt/server(handlers、middleware、server utilities)。按团队说法,用 nuxt/server 写的 server 代码在 Nuxt 5(Nitro v3 + h3 v2)上可原样运行。Nitro 仍是默认实现,另有实验性 @nuxt/vite-server 用 Vite Environment API 构建 server。
CLI v4 随 nuxt 一起发布:安装体积 13.1 MB → 3.5 MB,依赖 70 → 31,nuxt dev 首屏 330 ms → 50 ms,Linux 常驻内存 630 MB → 440 MB。nuxt dev 增加了交互式终端 UI,并在 .nuxt/ 下写入 lock 文件,让第二个 dev server(比如 agent 起的)接管或让位。
Vue Vapor 方面,在 `` 上加 vapor 属性可让组件/页面选择性启用 Vue 3.6 的 Vapor 模式;应用根仍留在虚拟 DOM,需要 Vue 3.6.0-rc.2 以上。
4.6.0 同期的安全修复还有两条:内部错误路由只能由错误渲染触达;不再把未处理的错误数据传给错误页。
升级与自查
Node.js 要求为 ^22.22.3、^24.15.0 或 26 及以上。Nuxt 3 已于 2026-07-31 EOL。
# 先确认当前运行时与依赖版本
node -v
npm ls nuxt
# 推荐升级方式(含去重)
npx nuxt upgrade --dedupe
升级后确认落在 4.6.3 或更高:
npx nuxt --version
如果项目里显式设置了 NUXT_APP_SECRET,检查它在生产与 dev 环境下各自的来源;升级后 dev 下不再下发自动生成的 key,依赖它做 session 密封的代码应确认仍能拿到密钥,并按警告提示补齐正式环境的值。