加载笔记内容...
加载笔记内容...
在现代前端开发中,包管理工具如 npm 为我们提供了极大的便利。然而,随着依赖生态系统的复杂化,供应链攻击的风险也在增加。近期,Vant 组件被投毒的事件引起了广泛关注,攻击者通过篡改 postinstall
脚本,试图在用户系统中执行恶意代码。为应对此类威胁,pnpm 提供了 onlyBuiltDependencies
和 onlyBuiltDependenciesFile
配置选项,帮助开发者在安装依赖时限制哪些包可以执行安装脚本,从而提升项目的安全性。
理解 postinstall
脚本的风险
在 npm 包的 package.json
文件中,postinstall
脚本会在包安装完成后自动执行。虽然这对于执行必要的构建步骤或初始化操作非常有用,但也可能被恶意者利用,执行未经授权的代码,危及系统安全。
pnpm 的安全特性
pnpm 作为高性能的包管理工具,提供了更细粒度的控制,允许开发者指定哪些依赖可以在安装过程中执行脚本。这主要通过以下两个配置实现:
onlyBuiltDependencies
:此字段允许在安装期间执行安装脚本的包名列表。如果此字段存在,那么只有列出的包能够运行安装脚本。
示例:
1{
2 "pnpm": {
3 "onlyBuiltDependencies": ["fsevents"]
4 }
5}
6
在上述配置中,只有 fsevents
包被允许在安装时执行其安装脚本。
onlyBuiltDependenciesFile
:此配置选项允许用户指定一个 JSON 文件,该文件列出了在 pnpm 安装过程中允许运行安装脚本的包。通过使用它,可以增强安全性或确保在安装过程中只有特定的依赖项执行脚本。
示例:
1{
2 "dependencies": {
3 "@my-org/policy": "1.0.0"
4 },
5 "pnpm": {
6 "onlyBuiltDependenciesFile": "node_modules/@my-org/policy/onlyBuiltDependencies.json"
7 }
8}
9
在 onlyBuiltDependencies.json
文件中,应包含允许执行安装脚本的包名称列表:
1[
2 "fsevents"
3]
4
实施步骤
确定可信赖的依赖包:审查项目中的依赖,确定哪些包确实需要在安装时执行脚本。
配置 pnpm
设置:在项目的 package.json
中,添加 pnpm
字段,并根据需要使用 onlyBuiltDependencies
或 onlyBuiltDependenciesFile
进行配置。
创建 onlyBuiltDependencies.json
文件(如果适用):如果选择使用 onlyBuiltDependenciesFile
,则需要在指定路径创建包含允许执行安装脚本的包名称列表的 JSON 文件。
测试和验证:运行 pnpm install
,确保只有指定的包执行了安装脚本,并验证项目功能正常。
注意事项
定期更新依赖:保持依赖包的更新,及时获取安全补丁,减少被攻击的风险。
监控安装日志:在安装过程中,关注 pnpm 的日志输出,确保未授权的包未尝试执行安装脚本。
教育团队成员:确保团队中的所有开发者了解这些安全措施的重要性,并在各自的项目中加以实施。
通过合理配置 pnpm 的 onlyBuiltDependencies
和 onlyBuiltDependenciesFile
,可以有效防范因 postinstall
脚本被投毒而引发的安全问题,保障项目的安全性和稳定性。