【问题标题】:What is the integrity field in the npm package-lock.json actually for?npm package-lock.json 中的完整性字段实际上是做什么用的?
【发布时间】:2020-11-17 00:11:00
【问题描述】:

我现在正在 npm 中闲逛。我想看看使用 npm 的开发人员会面临什么样的安全风险。

我感兴趣的主要攻击类型是供应链攻击,其中开发人员或构建系统(我们可以认为只是另一个开发人员)得到了他们不期望的东西。

当我执行以下操作时,我有意想不到的 - 至少对我来说 - 行为:

  • npm init
  • npm install xxx - 不管 xxx 是什么
  • 编辑 package-lock.json 文件并更改完整性 - 例如换一个字符
  • rm -rf node_modules
  • npm install

期待 某种抱怨安装包的哈希不匹配

实际 package-lock.json 刚刚更新

我在这里很密集吗?我希望完整性字段能够让 npm 在安装意外的东西时以某种方式发现。为什么会更新?

【问题讨论】:

  • 我对@9​​87654325@ 和npm@6 进行了测试,两次都出现EINTEGRITY 错误。你正在运行什么版本的 npm,什么操作系统,你是从公共存储库还是从其他地方安装包?
  • 我很困惑。我现在无法复制。在开始回答您的问题后,我天真地最终使用 nvm 切换了节点版本。不幸的是,在我这样做之前我没有尝试回购,所以我不能确定切换版本(和切换回来)是否改变了行为。我会关闭帖子。除了湿件故障之外,不知道如何解释这一点:耸耸肩:

标签: npm


【解决方案1】:

我使用npm@7npm@6 进行了测试,两次都出现EINTEGRITY 错误。我安装了 Node.js 10.x 并使用 npm@5 进行了测试,再次获得了 EINTEGRITY。在npm@5 之前,不支持package-lock.json 文件。

我可以想到两种情况(除了“我忘记在 package-lock.json 中保存我的更改”之类的东西)来解释您所看到的情况。

首先,也许您在删除node_modules 时不小心删除了package-lock.json?我的意思是,我经常将两者一起移除,以至于对我来说存在潜在的肌肉记忆问题。也许你也一样?

我唯一能想到的另一件事是,如果您最初使用支持package-lock.jsonnpm 版本安装,但在编辑package-lock.json 之后,您使用引入之前的版本重新安装package-lock.json 功能。这似乎不太可能,但如果您使用不同的交互式 shell 进行安装并使用nvm,这是可能的。打开两个终端,在一个终端中更改nodenpm的版本,然后同时使用两个终端——你现在在两个终端中使用不同的版本。

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2017-10-30
    • 2017-12-14
    相关资源
    最近更新 更多