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

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

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

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

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

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

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

    所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么
    Macv1994
        16
    Macv1994  
       2022-10-22 12:41:35 +08:00
    所以新轮子还是过段时间再用比较好
    beisilu
        17
    beisilu  
       2022-10-22 14:03:29 +08:00
    flutter 的 pub 引包也是^,所以也有类似的可能。
    我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。
    Jooooooooo
        18
    Jooooooooo  
       2022-10-22 14:29:59 +08:00
    没有版本控制和升级评估的吗?
    SuperChenCN
        19
    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
        20
    weeei  
       2022-10-22 22:56:36 +08:00
    “其它语言的包管理器有什么预防这种行为的机制吗?”
    把库 Fork 出来,只引用 fork 后的仓库。
    userdhf
        21
    userdhf  
       2022-10-23 17:24:34 +08:00
    Long Live jQuery
    :/doge
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.