ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Node.js 15.14.0(Current)发布详解:安全修复、AbortSignal 支持与 async iterator 增强

Node.js 15.14.0(Current)发布详解:安全修复、AbortSignal 支持与 async iterator 增强 Node.js 15.14.0Current发布详解安全修复、AbortSignal 支持与 async iterator 增强【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org导读Node.js v15.14.0 是 15.x Current 版本线在 2021 年 4 月发布的一个安全补丁版本它随 April 2021 Security Releases 一并推出修复了 OpenSSL 的 3 个高危漏洞并首次为fsPromises.writeFile增加了 async iterator 支持、为net与readline模块引入了 AbortSignal 中止能力。本文将基于 nodejs.org 仓库中的 v15.14.0 发布公告 为主线结合仓库内发布博客生成脚本、漏洞数据生成器与相邻版本公告深度解析本次发布的漏洞影响范围、重要特性与完整安装方式帮助你理解 Node.js 安全补丁版的发布流程和核心变更细节。一、发布概览一次“Current 线”的安全补丁发布Node.js v15.14.0 于 2021-04-06 由 Myles Borins 发布见 v15.14.0.md 的 frontmatterdate: 2021-04-06T20:50:15.313Zauthor: Myles Borins版本线为Current15.x 当时并非 LTS 线。同日Node.js 官网还同步发布了 April 2021 Security Releases 公告v10.24.1、v12.22.1、v14.16.1 三个 LTS 补丁版本与 v15.14.0 一起组成了一次横跨 4 个版本线的安全发布窗口。从仓库的scripts/release-post脚本可以确认这种发布公告的“生产线”index.mjs 会从 changelog、GitHub 作者信息、版本策略、SHASUMS 和下载地址中自动抓取数据再通过 template.hbs 渲染出apps/site/pages/en/blog/release/vX.md这样的发布博客。这也解释了 v15.14.0.md 文档结构的由来frontmatter Notable Changes Commits 下载清单 SHASUMS。二、安全修复本次发布的核心内容本次发布最值得关注的是 3 个高危High级别的安全修复。其中 2 个来自 OpenSSL1 个来自 npm 依赖 y18n。2.1 CVE-2021-3450CA 证书校验绕过OpenSSL问题OpenSSL 中X509_V_FLAG_X509_STRICT标志下存在 CA 证书检查绕过漏洞攻击者可能利用畸形的 X.509 证书绕过证书链校验。利用路径这是 OpenSSL 的漏洞但可经由 Node.js 被利用——Node.js 内置 OpenSSL所有依赖 TLS/HTTPS 的代码都受影响。影响范围15.x、14.x、12.x、10.x 全部版本。2.2 CVE-2021-3449signature_algorithms 处理中的空指针解引用OpenSSL问题OpenSSL 在处理 TLS 握手中的signature_algorithms扩展时存在 NULL pointer dereference可能造成拒绝服务崩溃。利用路径同样为 OpenSSL 漏洞可通过 Node.js 的 TLS 服务被远程触发。影响范围15.x、14.x、12.x、10.x 全部版本。2.3 CVE-2020-7774npm y18n 原型污染Prototype Pollution问题npm 依赖的y18n模块存在原型污染漏洞。利用路径通过 npm 生态中的 y18n 被利用Node.js 官方在本次发布中完成了 y18n 升级以修复。影响范围14.x、12.x、10.x 全部版本注意15.x 不受此漏洞影响。关于影响范围的表达v15.14.0.md 中明确区分了 3 个漏洞的受影响版本线这与仓库中 vulnerabilities.mjs 按 major 版本分组漏洞数据的逻辑一致——该生成器通过vulnerable字段中的版本范围如12.x、10等将每条漏洞归并到对应的大版本组供网站的安全/生命周期页面渲染。2.4 OpenSSL 1.1.1k 升级与相关提交为修复上述两个 OpenSSL 漏洞本次发布将 OpenSSL 源码升级到1.1.1kquiccommitbbdcdad2c6PR #37916并同步更新了 archs 文件commitf0e77149a4。发布说明中同时附带了一个文档提交f3fabb57cfPR #37927补充了 OpenSSL 升级过程中的 cleanup 步骤说明 Node.js 项目对 OpenSSL 升级流程有明确的工程化要求。三、Other Notable Changes4 项 SEMVER-MINOR 新特性除安全修复外v15.14.0 还引入了 4 个向后兼容的新特性SEMVER-MINOR。3.1 fsfsPromises.writeFile支持 async iteratorcommitb6f4901221PR #37490作者 HiroyukiYagihashi为fsPromises.writeFile增加了对async iterators的支持import { writeFile } from node:fs/promises; // 传入一个 async iterablewriteFile 会逐块消费并写入 async function* generateChunks() { yield Hello, ; yield Node.js ; yield 15.14.0!; } await writeFile(/tmp/hello.txt, generateChunks());在此之前writeFile主要接受字符串、Buffer 或 Uint8Array 等一次性数据本次改动让调用方可以传入 async iterator由fsPromises内部按迭代顺序写入适合流式构造大文件内容的场景。相邻版本 v15.12.0.md 中曾有对fsPromises.writeFile性能的优化提交PR #37610本次改动是这一方向的延续。3.2 net新增 SocketAddress 类与 BlockList 增强三个相关提交均出自 James M Snell 的 PR #37917daa8a7bbcf新增net.SocketAddress类用于以结构化方式描述网络地址0709cbb7fenet.BlockList支持使用net.SocketAddress对象作为添加/检查规则的对象a4169ce519net.BlockList变为可 clone 的cloneable便于复制规则集。典型用法const { BlockList, SocketAddress } require(net); const blockList new BlockList(); const addr new SocketAddress({ address: 192.168.1.10, port: 80 }); blockList.addAddress(addr, ipv4); console.log(blockList.check(addr)); // true const cloned blockList.clone(); // 可克隆从源码结构看这些能力为 Node.js 后续在net模块中统一地址表示、并在 QUIC/TLS 等底层使用同一套地址抽象打下了基础15.x 主线曾引入实验性 QUIC 支持见 v15.0.0.md。3.3 net, tlsconnect 支持 abort signalcommit669b81c68bPR #37735作者 Nitzan Uziely为net.connect和tls.connect增加AbortSignal 支持允许通过AbortController取消连接const net require(net); const { AbortController } globalThis; const controller new AbortController(); const socket net.connect({ host: example.com, port: 443, signal: controller.signal }); // 取消连接 controller.abort();3.4 readlineInterface 支持 AbortSignalcommita1123f0a29PR #37932作者同为 Nitzan Uziely为readline.Interface增加 AbortSignal 支持配套的6cc1e15669PR #37929修复了“信号在question()调用前已被 abort”时的处理问题pre-aborted signal handling。用法示例const readline require(readline); const { AbortController } globalThis; const rl readline.createInterface({ input: process.stdin, output: process.stdout }); const controller new AbortController(); rl.question(输入你的名字, { signal: controller.signal }, answer { console.log(你好, ${answer}); rl.close(); }); // 5 秒后自动中止提问 setTimeout(() controller.abort(), 5000);可以看到本次发布中 AbortSignal 相关改动横跨net、tls、readline三个模块是 Node.js 持续推进“取消/中止”统一抽象的一次集中落地。四、Commits 明细速览v15.14.0 共包含 42 条提交除了上面重点分析的安全与特性提交外值得关注的还有crypto修正 WebCrypto 中 RSASSA-PKCS1-v1_5 算法名ac69b95e47PR #38029为randomInt增加 buffering960c6be229PR #35110depscjs-module-lexer 升级到 1.1.14ef102d34ePR #37992http2为自定义帧增加特定错误码062541aae5PR #37936module改进非法 data URL 的错误提示3ab9619e56PR #37701path重构以使用更多 primordialsa94cc27cbePR #37893url禁止在 URL host 中出现 pipe 字符|570fbcef93PR #37877toolsESLint 升级到 7.23.06d28a24f1cPR #37979以及若干 doc、test、src 的修复与清理提交。完整的逐条提交列表见 v15.14.0.md。五、下载与安装5.1 官方分发渠道本次发布的下载文件由发布公告列出位于https://nodejs.org/dist/v15.14.0/目录下仓库内 downloadsTable.mjs 定义了每个版本可用的下载项模板。针对 v15.14.0官方提供平台安装包/二进制Windows 32-bitnode-v15.14.0-x86.msi/win-x86/node.exeWindows 64-bitnode-v15.14.0-x64.msi/win-x64/node.exemacOS 64-bitnode-v15.14.0.pkg/node-v15.14.0-darwin-x64.tar.gzLinux 64-bitnode-v15.14.0-linux-x64.tar.xzLinux PPC LE / s390xnode-v15.14.0-linux-ppc64le.tar.xz/node-v15.14.0-linux-s390x.tar.xzAIX 64-bitnode-v15.14.0-aix-ppc64.tar.gzARMv7 / ARMv8node-v15.14.0-linux-armv7l.tar.xz/node-v15.14.0-linux-arm64.tar.xz源码node-v15.14.0.tar.gz说明依据 downloadsTable.mjs 中的版本判定逻辑 16.0.0不提供 macOS Apple Silicon 二进制、 19.9.0不提供 Windows ARM 二进制v15.14.0 这一版并未发布 macOS arm64 与 Windows ARM 产物这与公告列出的清单一致。API 文档对应版本为https://nodejs.org/docs/v15.14.0/api/。5.2 用 nvm 安装推荐对 15.x Current 线最便捷的方式是使用 nvmnvm install 15.14.0 nvm use 15.14.0 node -v # v15.14.05.3 Linux/macOS 手动安装# 下载并解压 curl -O https://nodejs.org/dist/v15.14.0/node-v15.14.0-linux-x64.tar.xz tar -xJf node-v15.14.0-linux-x64.tar.xz # 加入 PATH export PATH$PWD/node-v15.14.0-linux-x64/bin:$PATH node -v5.4 校验完整性SHASUMS 与 PGP 签名v15.14.0 公告附带了完整的 SHASUMS 清单v15.14.0.md内容为 SHA-256 校验和并以 PGP 签名包裹BEGIN PGP SIGNED MESSAGE/BEGIN PGP SIGNATURE保证校验和本身未被篡改。官方下载站同时提供SHASUMS256.txt.asc发布脚本 index.mjs 正是从这个地址抓取校验和数据生成公告。建议的校验流程# 1. 下载 SHASUMS256.txt.asc 并验证 PGP 签名 # 2. 用 sha256sum 核对每个文件的校验和 sha256sum -c SHASUMS256.txt.asc --ignore-missing六、背景知识什么是“Current”发布线与安全补丁节奏Current是指非 LTS 的偶数/奇数主版本线如 15.x接受新特性SEMVER-MINOR与安全修复但不在 LTS 维护计划内本次发布的 3 个高危漏洞同时波及 10.x/12.x/14.x/15.x 四条线因此 Node.js 官方在同一天为每条线发布了对应补丁版本见 april-2021-security-releases.mdv15.14.0 即其中的 Current 线补丁仓库中 releaseData.mjs 展示了网站如何根据“最新版本是否为 LTS”以及“是否超过 EOL 日期”计算各主版本的状态Current/LTS/EOL15.x 线在后续进入 EOL 后即不再收到此类安全更新。如果你正在维护基于 Node.js 的 TLS 服务或依赖 npm 的工具链且版本处于受影响区间15.x、14.x、12.x、10.x应当升级到包含本次修复的补丁版本。延伸阅读Node.js 15.13.0 发布公告上一个 Current 版本可对比版本演进Node.js 15.0.0 发布公告15.x 主版本特性总览April 2021 Security Releases本次安全发布的完整公告release-post 生成脚本 与 模板发布公告的生产流水线漏洞数据生成器网站如何按版本线聚合漏洞信息【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表