标题和作者

本文标题为“Package Managers Need to Cool Down”,作者为 Andrew Nesbitt,发布于 2026 年 3 月 4 日。Nesbitt 是一名专注于软件开发和供应链安全的技术博主。本文的主题是探讨依赖冷却机制,即为了防止恶意软件利用新发布的依赖包进行攻击,建议开发者不要立即安装最新版本的依赖,而是等待一段时间让社区有时间发现潜在的安全问题。文章回顾了当前主流包管理工具如何支持或计划支持这一机制。

摘要

本文回顾了依赖冷却机制在各类包管理工具中的最新发展现状。在此之前,Andrew Nesbitt 曾受 Simon Willison 关于依赖冷却的启发,提出过这一概念。近期发生的 LiteLLM 供应链攻击事件再次引发了人们对这一机制的重视。本文详细列举了 pnpm、Yarn、Bun、Deno、uv、pip 和 npm 等主流工具如何支持或引入依赖冷却功能,例如设置最小发布年龄或排除特定包,显示出该领域活跃的开发进展。此外,pip 目前仅支持绝对时间戳,开发者可通过 cron 定时任务实现相对时间限制。本文指出,虽然 pip 的相对时间支持仍在请求中,但社区已找到了变通方案。

为了帮助不了解技术的听众理解,本文涉及的“依赖冷却”是指一种安全策略,就像在超市新上架的食品需要等待几天才能打折一样,新发布的软件包也需要等待一段时间才能被安装,以便社区有时间检查它是否安全。“供应链攻击”则是指攻击者通过篡改软件包的源头来植入恶意代码,从而感染依赖它的所有项目。

主要主题和概念

依赖冷却机制
What:依赖冷却是一种安全策略,要求在安装依赖包时,不能直接安装最新版本,而是强制要求依赖包必须经过一段时间的“冷却期”,或者只能安装发布时间早于特定时间的版本。其核心目的是为了给社区留出时间来审查新发布的包是否被篡改或包含漏洞。
Why:在软件供应链攻击日益猖獗的背景下,攻击者往往利用新版本发布初期开发者急于更新的心理,在包中植入恶意代码(如后门)。通过设置冷却期,可以避免开发者直接使用被篡改的包。最近的 LiteLLM 攻击就是典型的例子,攻击者利用了新版本发布后的信任盲区。这种机制利用了社区的安全审计能力,在恶意代码扩散之前进行拦截。
How:各大包管理工具通过配置参数来实现这一机制。开发者可以在配置文件中设置“最小发布年龄”,例如要求依赖包必须在发布 7 天后才能被安装。对于受信任的包,可以设置例外,使其不参与冷却检查。例如,pnpm 支持设置 minimumReleaseAge,pip 支持设置 --uploaded-prior-to 时间戳,npm 支持设置 min-release-age。这些机制通过软件内部的逻辑判断来限制安装行为,而不需要开发者手动干预。

为了帮助不了解技术的听众理解,本文涉及的“供应链攻击”是指黑客攻击软件开发供应链中的一个环节,通常是通过篡改开源软件包的发布版本,将其替换为包含恶意代码的版本,从而感染依赖它的所有下游项目。“最小发布年龄”则是一个时间阈值,表示新发布的软件包必须在这个时间之后才能被安装,以此换取社区的安全审查时间。

重要引文

论点:主流的包管理工具正在积极引入和增强依赖冷却机制,以提升软件供应链的安全性。
论据:文中列举了多个工具的最新版本及其具体功能。例如,pnpm 在 10.16 版本中引入了 minimumReleaseAgeminimumReleaseAgeExclude;Yarn 在 4.10.0 版本中增加了 npmMinimalAgeGatenpmPreapprovedPackages;Bun 在 1.3 版本中通过 bunfig.toml 支持 minimumReleaseAge;Deno 在 2.6 版本中为 deno updatedeno outdated 命令添加了 --minimum-dependency-age 选项;uv 在 0.9.17 版本中增加了 --exclude-newer 的相对时长支持和 exclude-newer-package;pip 在 26.0 版本中引入了 --uploaded-prior-to(仅绝对时间戳);npm 在 11.10.0 版本中增加了 min-release-age 设置。
论证:从 2025 年 9 月开始,pnpm 和 Yarn 率先支持,随后在 2025 年 10 月和 12 月,Bun、Deno 和 uv 紧随其后,到了 2026 年 1 月和 2 月,pip 和 npm 也相继加入。这种从 JavaScript 生态向 Python 生态,再到通用语言工具的全面扩散,有力地证明了该机制已经获得了广泛的工具支持,不再仅仅是一个理论构想。

为了帮助不了解技术的听众理解,本文提到的 pnpm 是一个快速的 Node.js 包管理器,Yarn 是另一个流行的 JavaScript 包管理器,Bun 是一个高性能的 JavaScript 运行时和工具链,Deno 是一个安全运行的 JavaScript 和 TypeScript 运行时,uv 是一个快速的 Python 包管理器,pip 是 Python 的标准包管理器,而 npm 是 Node.js 的包管理器。这些工具都在努力支持依赖冷却功能。

总结

本文最重要的部分在于揭示了依赖冷却机制在包管理工具中的普及趋势。受限于近期发生的 LiteLLM 供应链攻击,该机制从理论走向了实践。文档详细记录了从 2025 年到 2026 年初,pnpm、Yarn、Bun、Deno、uv、pip 和 npm 等工具如何通过配置参数(如 minimumReleaseAgemin-release-age)逐步支持这一功能。这不仅展示了工具的迭代速度,也为开发者提供了一个具体的防御策略:通过设置冷却期,利用社区时间来验证新依赖的安全性,从而有效降低软件供应链被劫持的风险。目前 pip 仅支持绝对时间戳,但已有 cron 定时任务的变通方案,未来有望支持相对时间。

为了帮助不了解技术的听众理解,本文提到的“LiteLLM”是一个用于大语言模型(LLM)的库,近期它遭受了供应链攻击,这意味着攻击者通过篡改这个库的安装包,使得使用它的开发者可能会无意中下载了包含恶意代码的版本。本文提出的解决方案是让这个库在发布后“冷却”几天,直到开发者确认它是安全的。