正如你们大多数人可能已经知道的那样,最近在使用 npm 模块时,突出显示了一个潜在的危险安全漏洞。总的来说,jQuery Foundation 仍然认为这是一种安全且功能强大的做法,并且我们绝不会说您不应该再在您的 JavaScript 项目中使用 npm 进行包管理。我们希望倡导的是对 jQuery Foundation 中插件开发者和使用许多在 npm 上分发包的项目社区的谨慎态度,在安装包及其依赖项时。
快速回顾
与其重写故事,不如查看 npm 博客上的完整回顾和总结。
关注点
接下来发生的事情就是我们写这篇文章的原因。Azer Koçulu 在 npm 上发布了一系列包,其中一个就是 left-pad 包,这是一个简单的代码片段,被许多其他包所依赖。在包被取消发布后,许多流行的项目开始出现构建失败,因为缺少了这个包。这本身就令人担忧,任何人都可以取消发布你所依赖的包,或者你依赖项的依赖项的依赖项,从而给你或你的团队带来真正的麻烦。在 left-pad 被取消发布后不久,npm 团队决定将其重新发布,并指定了新的所有者,以修复互联网上许多出现故障的构建。更令人担忧的是,一旦一个包被取消发布,任何人都可以获取你在依赖树中依赖的那些包名,并将新的、潜在的恶意代码推送到你的项目中。通常情况下,这问题不大,因为你的包可能依赖于被取消发布的版本,而新发布的版本不会被拉取。然而,许多人在安装依赖项时会使用命令 npm i --save <package-name> 或 npm i --save-dev <package-name>,默认情况下会安装当时发布的最新版本,前面带有一个 ^,例如 ^1.0.0,这告诉 npm 在下次更新依赖项时安装任何通过次要版本更新的版本。这意味着,如果你重新安装或更新你的项目,并且有人将恶意代码推送到我们示例中的补丁版本 (1.0.1) 或次要版本 (1.1.0) 中,它将自动安装到你的项目中。
建议
我们的主要建议是小心谨慎。了解你正在安装的内容,以及你的依赖项及其依赖项正在安装的内容。你现在应该检查你的项目,看看你依赖的任何模块是否已被取消发布,以及是否有任何模块在 此列表 上,并且最近发布了你可能希望避免的新版本,直到你确认它是安全的。虽然我们没有直接与他们交谈,但我们相信 npm, inc. 的团队正在努力寻找解决这些问题的方法,但在那之前,请保持警惕,并确保你的项目和插件安全。我们一直相信,并且继续相信,JavaScript 已经并将继续是开发从个人博客到企业级应用程序的最强大的选项之一。任何技术都会在发展过程中遇到一些问题,但只要我们从中学习,并在继续前进的过程中保留这些知识,JavaScript 就会取得成功。