为什么最近几年类似 faker.js 这样作者在开源包下毒的事件都发生在 Node.js?是其它语言的包管理器有什么预防这种行为的机制吗? Python 的 pypi 包作者可以在不改版本号的情况下换包吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
edis0n0

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

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

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

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

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

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

    所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么
    Macv1994
        16
    Macv1994  
       2022 年 10 月 22 日
    所以新轮子还是过段时间再用比较好
    beisilu
        17
    beisilu  
       2022 年 10 月 22 日
    flutter 的 pub 引包也是^,所以也有类似的可能。
    我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。
    Jooooooooo
        18
    Jooooooooo  
       2022 年 10 月 22 日
    没有版本控制和升级评估的吗?
    SuperChenCN
        19
    SuperChenCN  
       2022 年 10 月 22 日
    打个广告,我司开源的一个 SCA 工具 [OpenSCA]( https://github.com/XmirrorSecurity/OpenSCA-cli
    可以自己维护漏洞库或者用我们云端的库。
    供应链安全是个很大的话题,希望这个工具能帮到需要的人。
    [手册]( https://opensca.xmirror.cn/docs/v1/start.html)
    weeei
        20
    weeei  
       2022 年 10 月 22 日
    “其它语言的包管理器有什么预防这种行为的机制吗?”
    把库 Fork 出来,只引用 fork 后的仓库。
    userdhf
        21
    userdhf  
       2022 年 10 月 23 日
    Long Live jQuery
    :/doge
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1140 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 110ms UTC 23:58 PVG 07:58 LAX 16:58 JFK 19:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86