【问题标题】:What measures have been taken to prevent something like the left-pad incident happening again?采取了哪些措施防止类似左垫事件再次发生?
【发布时间】:2021-10-04 02:59:16
【问题描述】:

2016 年,left-pad 包的维护者从 NPM 取消发布它,导致数百万个构建在 NPM 介入之前被破坏,并在可能出现太多混乱之前自行取消发布包

https://www.theregister.com/2016/03/23/npm_left_pad_chaos/

针对未来发生的此类事件采取了哪些预防措施? node_modules 文件在本地管理、捆绑等方面是否有任何变化? NPM 是否改变了他们关于开源工作方式的政策?是否有任何预期的努力来改变或修改开源开发的工作方式来处理此类问题?

编辑:我希望进行开放式讨论,但我猜 StackOverflow 不适合这样做,所以相应地修改了我的问题。

【问题讨论】:

  • 很抱歉,这个问题与编程无关。总会有滥用的媒介,通常当我们回顾它们时,我们会说,“为什么我们不认为会发生这种情况?” 72 小时后取消发布包变得更加困难。这很可能是由于这个问题。我们无法预测下一个向量是什么。答案是“是的”,当然有可能发生。但它的意见是基于我们的意见,因为我们无法预测它会是什么或什么时候。
  • 可能有防止取消发布大量使用的包的保护措施,但我怀疑任何自动化系统都可以检测到维护者是否用损坏的代码替换了一个版本(例如,使用右填充而不是左填充)跨度>
  • 为了让问题更切题,我建议专门问“采取了哪些措施,实施了哪些保障措施,以防止这种情况再次发生?”而不是开放式的“会发生这样的事情吗?”或“可能发生的最坏情况是什么?”问题。

标签: javascript npm frontend node-modules


【解决方案1】:

npm 使取消发布包变得更加困难

该事件的发生是因为left-pad 的维护者能够取消发布该包,尽管社区对它有依赖。

事件发生后不久(2016 年 3 月 23 日),npm 发布了post-mortem,其中包括他们的解决计划:

如果取消发布某个包的版本会破坏其他包,我们将加大取消发布该版本的难度。

npm 很快跟进了update(2016 年 3 月 29 日):

如果版本早于 24 小时,则取消发布将失败,并显示联系 support@npmjs.com 的消息。

npm 最近(2020 年 1 月)宣布了一个更重要的update,这是他们目前有效的unpublish policy

不到 72 小时前发布的软件包

对于新创建的包, 只要 npm 公共注册表中没有其他包依赖于你的 包,您可以在之后的前 72 小时内随时取消发布 出版。

发布时间超过 72 小时的软件包

无论多久以前 包已发布,您可以取消发布以下包:

  • npm 公共注册表中没有其他包依赖
  • 少于 上周下载了 300 次
  • 只有一个所有者/维护者

这意味着许多其他包所依赖的包(例如left-pad)实际上无法取消发布。

npm 阻止发布到废弃的包名称

另一个担忧是,以前有人可能将恶意包发布到废弃的包名(幸运的是,left-pad 没有发生这种情况)。 npm 将其作为其初始 post-mortem 的一部分进行了纠正:

如果具有已知依赖项的包完全未发布,我们将 用占位符包替换该包,以防止 立即采用该名称。仍然可以获得 通过联系 npm 支持来获得废弃包的名称。

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 2013-02-08
    • 2012-01-15
    • 2020-05-10
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多