为什么最近几年类似 faker.js 这样作者在开源包下毒的事件都发生在 Node.js?是其它语言的包管理器有什么预防这种行为的机制吗? Python 的 pypi 包作者可以在不改版本号的情况下换包吗?

2022-10-22 11:17:41 +08:00
 edis0n0
4141 次点击
所在节点    程序员
21 条回复
chrawsl
2022-10-22 11:25:52 +08:00
pypi 包版本号一样不给传的
charlie21
2022-10-22 11:27:14 +08:00
恶劣结果已经消除,faker.js 已经被社区挽救回来了啊
edis0n0
2022-10-22 11:30:23 +08:00
@charlie21 #2 那 npm 社区有采取什么措施防止(其它作者)这种情况再次发生了吗,现在不是大公司的 npm 包都不敢装了
moen
2022-10-22 11:35:41 +08:00
NuGet 是上传了就不能改,连删除都不允许
wgoose
2022-10-22 11:41:05 +08:00
@edis0n0 现在吃的都是科技与狠活,是不是所有吃的都不能吃了。
statumer
2022-10-22 11:51:15 +08:00
C++很有效地预防了包管理器引入依赖投毒的问题,因为 C++就没有包管理器。
npm 有 lock 机制所以供应链投毒顶多只影响开发阶段。
如果有更进一步的需求你可以维护一个私有 npm registry ,只存你信任的包版本。只不过每次升级社区依赖版本都要人工审核。
edis0n0
2022-10-22 11:53:33 +08:00
@statumer #6 npm 作者有可能上传同版本号包覆盖已有包吗
DeWjjj
2022-10-22 11:54:10 +08:00
每个版本更新都等三月再用。
statumer
2022-10-22 11:56:00 +08:00
这让我想到,你可以开一个公司,公司提供一个收费的 npm registry ,这个 npm registry 上所有的包都是你让员工人工审核过的无毒代码,名字可以叫 trusted registry 。用你这个公司的 registry 的用户要按流量和按月订阅付费。
statumer
2022-10-22 12:04:13 +08:00
@edis0n0 首先,这和同版本号没有一毛钱关系。社区开发者上传一个 minor version release 就行了。在产物构建和部署阶段,有 lock 机制所以和版本号没有关系。
其次,2014 年 2 月以后 npm 不允许上传同版本号。
learningman
2022-10-22 12:20:25 +08:00
pypi 上一堆只差一个字符的投毒。
MiketsuSmasher
2022-10-22 12:33:36 +08:00
pypi 上也有不少包在里面下毒,包括但不限于偷本地证书、偷 token 、偷密码……
https://www.bleepingcomputer.com/news/security/10-malicious-pypi-packages-found-stealing-developers-credentials/
otakustay
2022-10-22 12:35:07 +08:00
npm 也是不允许覆盖同版本的,但很多开发者没有用 package-lock ,导致新版本会被装上去
eason1874
2022-10-22 12:37:34 +08:00
自己不锁版本,关作者后续更新什么事。

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

白嫖就要有白嫖的觉悟,开源只是提供当前版本,不是提供长期支持服务
wu67
2022-10-22 12:38:13 +08:00
理论上来讲, 一个领域 /一个编程模式 如果要依赖三方的包进行, 那就会有这类的风险.

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

除非是知名社区或者商业公司像 Mozilla 微软 苹果 Linux 这样的进行背书、来搞‘官方’一点的开发生态, 其他的小团队 /个人开发者项目多少都会有风险. 而个人开发最容易造轮子的语言 /领域是哪些呢? 答案是 JS / Node / 前端.

所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么
Macv1994
2022-10-22 12:41:35 +08:00
所以新轮子还是过段时间再用比较好
beisilu
2022-10-22 14:03:29 +08:00
flutter 的 pub 引包也是^,所以也有类似的可能。
我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。
Jooooooooo
2022-10-22 14:29:59 +08:00
没有版本控制和升级评估的吗?
SuperChenCN
2022-10-22 15:51:55 +08:00
打个广告,我司开源的一个 SCA 工具 [OpenSCA]( https://github.com/XmirrorSecurity/OpenSCA-cli
可以自己维护漏洞库或者用我们云端的库。
供应链安全是个很大的话题,希望这个工具能帮到需要的人。
[手册]( https://opensca.xmirror.cn/docs/v1/start.html)
weeei
2022-10-22 22:56:36 +08:00
“其它语言的包管理器有什么预防这种行为的机制吗?”
把库 Fork 出来,只引用 fork 后的仓库。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX