代码 Node.js 26 转入 Active LTS:26.11.0 的服务端新 API 与 26.12.1 的四个 High 修复

2026-10-28 21:07:50

Node.js 26 转入 Active LTS:26.11.0 的服务端新 API 与 26.12.1 的四个 High 修复

从 2026-10-28 起,Node.js 26.x 由 Current 转为 Active LTS,同时 27.x 进入 Alpha。这轮切换前后有两个版本值得服务端代码重点关注:10-07 的 26.11.0(semver-minor,含 Buffer/HTTP/sqlite 的 API 变更)和 10-21 的 26.12.1(安全版,四个 High)。

一、发布时间线

按 nodejs/Release 的排期:

版本线状态初始发布Active LTS维护期开始EOL
22.xMaintenance LTS2024-04-242024-10-292025-10-212027-04-30
24.x (Krypton)Maintenance LTS2025-05-062025-10-282026-10-202028-04-30
26.xActive LTS2026-05-052026-10-282027-10-202029-04-30
27.xAlpha2026-10-282027-10-20—2030-04-30

也就是说,现在只有 26.x 还在接收常规的功能性更新,24.x 自 2026-10-20 起只进安全补丁,22.x 更早(2025-10-21)就进入了维护期。

二、26.11.0 中对服务端有用的新增

Buffer

  • Buffer.isLatin1()(#66298):判断一段 Buffer 是否整段都是合法 Latin-1。以前要自己遍历字节或先解码再比对,现在一次调用完成。
  • Buffer.stringLength()(#66064):先算长度再分配,避免 toString() 之后再取 length 的额外拷贝。

HTTP / HTTP2

  • http.isValidHeaderName() / http.isValidHeaderValue()(#66334):头名的合法性校验从内部函数变成公开 API,写代理、网关、自定义 header 处理逻辑时可以直接调用,不用再自己维护正则。
  • http2 新增 connectionWindowSize 选项(#65619):连接级流控窗口可在建连时配置,对高吞吐、大 body 的 HTTP/2 服务端有实际意义。

进程与运行时

  • process.ref() / process.unref() 从实验转为 stable(#66213)。
  • 新增 --process-timeout=N(#66138):给进程整体加一个超时上限,超时后退出,适合批处理、CI 脚本和一次性任务。
  • heap profile 输出中新增 size 和 count(#65737),采样文件不用再手工统计。

perf_hooks

  • 新增 histogram.diff() 和 histogram.snapshot()(#66099),可以拿两个时间点的直方图做差,观察一段区间内的延迟分布,而不是看累计值。
  • RecordableHistogram 允许记录 0 值(#66114)。
  • 修复 monitorEventLoopDelay 分辨率被截断的问题(#66115)。
  • 直方图导出格式升到 version 2(#66098),如果下游有解析脚本,需要同步改。

sqlite

  • DatabaseSync 与 StatementSync 改名(#65988)。这是 node:sqlite 内的命名调整,升级时留意类型名和文档引用。

其他

  • 文档层面把 Alpine Linux 提升为 tier 2 支持(#63737)。
  • 依赖更新:npm 11.20.0、undici 8.11.2、openssl 3.5.9、timezone 2026e。

三、26.12.1 安全版(2026-10-21)

发布说明见 v26.12.1。这次最高等级为 High,共四条:

  • TLS 拒绝非规范 IP 地址(CVE-2026-106069、CVE-2026-106072,High):同一处的两个编号,处理证书/SNI 中出现的非规范形式 IP 字面量。
  • dns resolve 输入校验 null 字节(CVE-2026-105482,High):dns.resolve 系列不再接受夹带 null 字节的主机名。
  • TLS IP 归一化回归修复(CVE-2026-105483,High):修正上一处 IP 归一化引入的回归。
  • brotli 越界(CVE-2026-111497,High):暴露 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH,并从上游 cherry-pick 修复(deps: brotli: cherry-pick 0ed4268a4401abcb44720963)。

Medium 与 Low:

  • http:在无 I/O 场景下也让 agent 的 data guard 生效(CVE-2026-105481,Medium)。
  • crypto:跨快照重置随机数缓存(CVE-2026-106074,Medium),涉及 v8.startupSnapshot 相关的进程。
  • zlib:不再缓存非法的 ZIP local header(CVE-2026-106070,Low)。
  • src:修复通配节点上的 fs permission 树节点(CVE-2026-106071,Low)。
  • permission:在 realpathSync 路径上检查权限模型(CVE-2026-106073,Low)。

此外还有一次 V8 backport,以及根证书更新到 NSS 3.131.1。

同一批补丁同时进入 v22.23.4 和 v24.22.1,三条线的最高等级都是 HIGH。10 月的汇总页在 。

四、升级时要检查的几处

  1. 自定义 lookup:如果给 https.request / net.connect 传了自己的 lookup 函数,确认返回的地址是规范化的 IP 字符串——dns 的 null 字节校验和 TLS 的 IP 归一化改动都可能影响这条路径。
  2. 证书或 SNI 里用 IP 字面量:拒绝非规范 IP 之后,形如带前导零或多余格式的 IP 不再被接受。内网自签证书、以 IP 作 SAN 的服务要实际跑一遍握手。
  3. Buffer 上的 Latin-1 手工判断:for 循环逐字节检查 <= 0xFF 的代码可以直接换成 Buffer.isLatin1(),行为一致且少一次遍历。
  4. node:sqlite 的类型名:确认代码和生成代码里引用的是改名后的 DatabaseSync / StatementSync。
  5. 直方图导出解析:导出格式已到 v2,监控侧如果有自写 parser,同步更新。
  6. 启用权限模型的服务:realpathSync 路径现在会检查权限,符号链接密集的目录可能首次报出之前没出现的拒绝。

三条 26 的 High 集中在 TLS 和 DNS,属于网络入口路径,建议先做灰度验证,再推全量。

复制全文 生成海报 Node.js LTS 安全更新 后端

推荐文章

程序员茄子在线接单