You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

package-lock.json能否锁定npm特定版本?npm包篡改与供应链安全问询

npm包供应链攻击相关问题解答

已发布的npm包能否被开发者事后修改?

npm官方默认禁止开发者直接修改已发布的稳定版本(如pkg@1.0.0这类非预发布版本),但存在两种可能的风险场景:

  • 发布后72小时内,开发者可通过npm unpublish命令删除该版本;超过72小时需联系npm官方申请删除。删除后若重新发布同名同版本包,即可替换为恶意代码。
  • 开发者可修改包的dist-tag(如latest标签),但这仅影响未指定具体版本的安装场景,与固定版本号的情况无关。

固定pkg@1.0.0到package-lock.json后是否仍有风险?

正常情况下不会。package-lock.json中会记录每个包的integrity哈希值,执行npm i时npm会校验下载包的哈希是否与lock文件中一致:

  • 若开发者重新发布了同名同版本的恶意包,其哈希值必然改变,npm会直接拒绝安装,抛出校验失败的错误。
  • 仅当你删除了package-lock.json、手动移除了integrity字段,或使用npm install --force跳过校验时,才会安装被篡改的版本。

防范措施

  • 务必保留并提交package-lock.json至代码仓库,确保团队所有成员安装的依赖版本完全一致。
  • 使用npm install --package-lock-only命令更新lock文件,避免修改本地node_modules,保证integrity字段的准确性。
  • 定期运行npm audit检查依赖的安全状态,包括是否存在被篡改的风险。
  • 启用npm 7+支持的包签名验证功能,确认包的发布者身份合法。
  • 对核心业务依赖,可将包同步到私有仓库或本地存储,完全掌控依赖来源。
  • 避免使用npm install --force、npm ci --force等跳过校验的命令,除非明确知晓操作风险。

内容的提问来源于stack exchange,提问作者VIEWVIEWVIEW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:47:46