为什么 npm 包不要求把包作者也写到依赖中去?

2023-01-07 20:16:48 +08:00
 zjsxwc

由帖子 新的前端 npm 包投毒事件 想到为什么同样是包管理的 php composer 、java maven 都会要求同时写包依赖的 包作者 与 包名,唯独 js npm 只需要写包名,不需要写上包作者,这样当前端有相似包名时就容易被“投毒”。

1541 次点击
所在节点    程序员
11 条回复
runze
2023-01-07 20:38:40 +08:00
python 、rust 等也没有,所以应该是某种取舍问题
Al0rid4l
2023-01-07 20:56:34 +08:00
问题在于, 包名可以相似那为什么包作者不可以呢? 这并不解决问题

包作者仅仅是充当一个类似命名空间的角色, 从这点来说 npm 也有 scope 并且现在越来越多的库也都在使用 scope, 知名的库使用的比例会更多一些
learningman
2023-01-08 02:18:17 +08:00
对应的应该是 scope ,就好像 java 的设计,包名里带域名,你传 mavenCentral 的时候要验证域名所有权的
zjsxwc
2023-01-08 11:56:13 +08:00
@runze
所以有人说 python pip 包也会被投毒
```
103hsfzxjy 2 天前 via Android
@Jooooooooo pip 包也会被投毒,Hacker News 经常能看到
zjsxwc
2023-01-08 12:02:01 +08:00
flyqie
2023-01-08 12:29:01 +08:00
@Al0rid4l #2

包作者哪怕相似也可以避免很多问题啊。

一般来说包的升级不会影响其所属作者,这样相对来说能够比较明确的区分该包是否由原作者发布。
runze
2023-01-08 16:05:23 +08:00
@zjsxwc 所以我说应该是某种取舍问题。

就算 node 、python 当初考虑不周,rust 、deno 、dart 这些后来者总该吸取经验,但是它们还是做出了相同的选择,肯定有原因的。
bjzhush
2023-01-08 16:30:49 +08:00
一个网络的名字,并不重要,投毒者一样可以起个假名。
最重要的是没有机制能进行审核或者尽早发现类似投毒这种问题
ragnaroks
2023-01-08 17:19:17 +08:00
应该用公钥来代替作者的标识,当下载一个包的时候弹出公钥导入提示,需要用户明确允许才能继续下载。

如果用户不能用公钥来识别是否预期作者,那这个用户本身不具备基础开发能力,活该被删文件。
qbug
2023-01-08 20:38:24 +08:00
@ragnaroks 对,所以我一直梦想着有基于 ipfs 和 ipns 的包管理器🤦🏻‍♂反正是在 package 配置文件里也不需要特别担心长度和记不住的问题,而且像 rust 的包管理器在 vscode 里甚至可以在线搜索包,这种的话就更不担心了,先用人类可读语言或者是 ens 查找,找到了就敲定 ipfs 哈希,绝对保证构建一致性,要升级的时候用 ipns 找相同作者对其的更新版本,自动密码学验证,十分完美。而且这套系统还可以自动实现去重避免重复下载,旧的缓存也可以按需清理。
qbug
2023-01-08 20:51:50 +08:00
@runze 这就是中心化包管理的问题,但是我就想不通为什么那些号称做去中心化包管理的语言和运行时没有吸收区块链的经验,ipfs swarm dat 这种带密码学保护的去中心化存储分发基础设施已经非常完善了。明明他们可以解决 go 和 deno 曾经体验极差的混乱包管理状态。

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

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

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

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

© 2021 V2EX