生命周期终止 (EOL)
为何以及如何判定 Node.js 版本进入生命周期终止 (End-Of-Life)
Node.js 的主要版本遵循可预测的时间表进行发布、打补丁并最终确定为“生命周期终止”。由于无限期维护所有发布线路是不可行的,在经过计划的维护期后,Node.js 的主要发布线路将不再由该项目进行维护。
当发布线路进入 EOL 后会发生什么
当一个版本进入“生命周期终止”阶段,意味着它将不再接收任何更新,包括安全补丁。这可能会导致运行在这些版本上的应用程序容易受到安全问题和漏洞的攻击,且这些问题将永远不会得到修复。
- 不再提供漏洞修复:当较新的主版本线发布安全更新并修补漏洞时,即使相同的漏洞也会影响已进入 EOL 的版本线,也不会再为它们提供任何新的修复版本。仍在使用 EOL 版本线并调用受影响代码路径的用户,将立即面临利用这些已披露漏洞进行攻击的风险。
- 工具链损坏:EOL 版本可能无法再动态链接到它们所依赖的共享库的更新版本,从而阻碍或中断系统更新。
- 生态系统脱节:随着时间的推移,许多流行的用户层软件包会停止对 EOL Node.js 版本的支持。当应用程序依赖过时的软件包时,可能会遭受更多未修复的漏洞和 bug 的影响,从而进一步偏离生态系统标准。
- 合规性警示:许多行业审计禁止使用未经维护的运行时环境。
EOL 版本
| 版本 (代号) | 最后更新 | 漏洞 | 详情 |
|---|---|---|---|
| v23 | 2高危2中危 | ||
| v21 | 7高危5中危 | ||
| v20 (Iron) | 27高危24中危9低危 | ||
| v19 | 1高危3中危2低危 | ||
| v18 (Hydrogen) | 15高危19中危4低危 | ||
| v17 | 1高危3中危1低危 | ||
| v16 (Gallium) | 11高危18中危4低危 | ||
| v15 | 1严重6高危1中危1低危 | ||
| v14 (Fermium) | 2严重16高危16中危5低危 | ||
| v13 | 1严重2高危 | ||
| v12 (Erbium) | 2严重13高危6中危3低危 | ||
| v11 | 3高危1中危 | ||
| v10 (Dubnium) | 1严重12高危3中危1低危 | ||
| v9 | 1严重4高危1中危1低危 | ||
| v8 (Carbon) | 1严重11高危2中危1低危 | ||
| v7 | 3高危2中危 | ||
| v6 (Boron) | 16高危12中危 | ||
| v5 | 15高危8中危 | ||
| v4 (Argon) | 2严重17高危9中危 | ||
| v0 | 2严重 |
商业支持
尽管使用 EOL 版本有明显的弊端,但在实践中,组织往往面临一些无法立即升级的限制,例如遗留代码库、合规性要求或复杂的依赖链。通过 OpenJS 基金会生态可持续发展计划,Node.js 由 HeroDevs 和 NodeSource 提供支持,以提供用于安全修复的商业服务。
HeroDevs 为已过官方维护阶段的 Node.js 版本提供 永久支持 (Never-Ending Support, NES)。这包括安全补丁、合规性协助和技术支持,旨在为您规划升级策略时提供过渡。
通过商业支持使用 EOL 版本应被视为一种临时解决方案——最终目标始终应当是升级到受官方支持的版本。