pypi 包版本号一样不给传的

恶劣结果已经消除,faker.js 已经被社区挽救回来了啊

#2 那 npm 社区有采取什么措施防止(其它作者)这种情况再次发生了吗,现在不是大公司的 npm 包都不敢装了

NuGet 是上传了就不能改,连删除都不允许

现在吃的都是科技与狠活,是不是所有吃的都不能吃了。

C++很有效地预防了包管理器引入依赖投毒的问题,因为 C++就没有包管理器。
npm 有 lock 机制所以供应链投毒顶多只影响开发阶段。
如果有更进一步的需求你可以维护一个私有 npm registry ,只存你信任的包版本。只不过每次升级社区依赖版本都要人工审核。

#6 npm 作者有可能上传同版本号包覆盖已有包吗

每个版本更新都等三月再用。

这让我想到,你可以开一个公司,公司提供一个收费的 npm registry ,这个 npm registry 上所有的包都是你让员工人工审核过的无毒代码,名字可以叫 trusted registry 。用你这个公司的 registry 的用户要按流量和按月订阅付费。

首先,这和同版本号没有一毛钱关系。社区开发者上传一个 minor version release 就行了。在产物构建和部署阶段,有 lock 机制所以和版本号没有关系。
其次,2014 年 2 月以后 npm 不允许上传同版本号。

pypi 上一堆只差一个字符的投毒。

pypi 上也有不少包在里面下毒,包括但不限于偷本地证书、偷 token 、偷密码……
www.bleepingcomputer.com/news/security/10-malicious-pypi-packages-found-stealing-developers-credentials/

npm 也是不允许覆盖同版本的,但很多开发者没有用 package-lock ,导致新版本会被装上去

自己不锁版本,关作者后续更新什么事。

就算作者无恶意,只是大版本更新推出新的 API ,不兼容旧 API ,你不锁版本一样完蛋

白嫖就要有白嫖的觉悟,开源只是提供当前版本,不是提供长期支持服务

理论上来讲, 一个领域 /一个编程模式 如果要依赖三方的包进行, 那就会有这类的风险.

事实上开源只是公开源代码, 但是并没有多少人会去完整阅读它, 也没有多少人能去完整阅读它, 人的精力是有限的, 并且绝大多数开源项目都没有一个完善的技术文档、甚至有些连注释都没有, 要去理解这么多代码实在是太难了.

除非是知名社区或者商业公司像 Mozilla 微软 苹果 Linux 这样的进行背书、来搞‘官方’一点的开发生态, 其他的小团队 /个人开发者项目多少都会有风险. 而个人开发最容易造轮子的语言 /领域是哪些呢? 答案是 JS / Node / 前端.
所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么

所以新轮子还是过段时间再用比较好

flutter 的 pub 引包也是^,所以也有类似的可能。
我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。

没有版本控制和升级评估的吗?

打个广告,我司开源的一个 SCA 工具 [OpenSCA]( github.com/XmirrorSecurity/OpenSCA-cli
可以自己维护漏洞库或者用我们云端的库。
供应链安全是个很大的话题,希望这个工具能帮到需要的人。
手册

“其它语言的包管理器有什么预防这种行为的机制吗?”
把库 Fork 出来,只引用 fork 后的仓库。

Long Live jQuery
:/doge