V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

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

  •  
  •   zjsxwc ·
    zjsxwc · 2023-01-07 20:16:48 +08:00 via Android · 1342 次点击
    这是一个创建于 446 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    npmae91bd0b0d04570b.jpg

    composer58d50f3aeb802727.jpg

    mvn023f3811d24e151a.jpg

    runze
        1
    runze  
       2023-01-07 20:38:40 +08:00
    python 、rust 等也没有,所以应该是某种取舍问题
    Al0rid4l
        2
    Al0rid4l  
       2023-01-07 20:56:34 +08:00
    问题在于, 包名可以相似那为什么包作者不可以呢? 这并不解决问题

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

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

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

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

    如果用户不能用公钥来识别是否预期作者,那这个用户本身不具备基础开发能力,活该被删文件。
    qbug
        10
    qbug  
       2023-01-08 20:38:24 +08:00 via Android
    @ragnaroks 对,所以我一直梦想着有基于 ipfs 和 ipns 的包管理器🤦🏻‍♂反正是在 package 配置文件里也不需要特别担心长度和记不住的问题,而且像 rust 的包管理器在 vscode 里甚至可以在线搜索包,这种的话就更不担心了,先用人类可读语言或者是 ens 查找,找到了就敲定 ipfs 哈希,绝对保证构建一致性,要升级的时候用 ipns 找相同作者对其的更新版本,自动密码学验证,十分完美。而且这套系统还可以自动实现去重避免重复下载,旧的缓存也可以按需清理。
    qbug
        11
    qbug  
       2023-01-08 20:51:50 +08:00 via Android
    @runze 这就是中心化包管理的问题,但是我就想不通为什么那些号称做去中心化包管理的语言和运行时没有吸收区块链的经验,ipfs swarm dat 这种带密码学保护的去中心化存储分发基础设施已经非常完善了。明明他们可以解决 go 和 deno 曾经体验极差的混乱包管理状态。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2750 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:10 · PVG 20:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.