为什么最近几年类似 faker.js 这样作者在开源包下毒的事件都发生在 Node.js?是其它语言的包管理器有什么预防这种行为的机制吗? Python 的 pypi 包作者可以在不改版本号的情况下换包吗? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
edis0n0

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

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

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

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

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

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

    所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么
    Macv1994
        16
    Macv1994  
       Oct 22, 2022
    所以新轮子还是过段时间再用比较好
    beisilu
        17
    beisilu  
       Oct 22, 2022
    flutter 的 pub 引包也是^,所以也有类似的可能。
    我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。
    Jooooooooo
        18
    Jooooooooo  
       Oct 22, 2022
    没有版本控制和升级评估的吗?
    SuperChenCN
        19
    SuperChenCN  
       Oct 22, 2022
    打个广告,我司开源的一个 SCA 工具 [OpenSCA]( https://github.com/XmirrorSecurity/OpenSCA-cli
    可以自己维护漏洞库或者用我们云端的库。
    供应链安全是个很大的话题,希望这个工具能帮到需要的人。
    [手册]( https://opensca.xmirror.cn/docs/v1/start.html)
    weeei
        20
    weeei  
       Oct 22, 2022
    “其它语言的包管理器有什么预防这种行为的机制吗?”
    把库 Fork 出来,只引用 fork 后的仓库。
    userdhf
        21
    userdhf  
       Oct 23, 2022
    Long Live jQuery
    :/doge
    About     Help     Advertise     Blog     API     FAQ     Solana     3243 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 92ms UTC 12:16 PVG 20:16 LAX 05:16 JFK 08:16
    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