V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Mithril
V2EX  ›  程序员

用过 Colors 和 Faker.js 的今天不要更新项目依赖

  •  1
     
  •   Mithril · 2022-01-10 09:35:44 +08:00 · 17427 次点击
    这是一个创建于 1082 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者在 NPM 包里放了死循环。如果你的项目有直接或者间接引用的话,很可能会挂掉。 https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/

    项目的依赖管理还是要谨慎一些,特别是当不指定具体版本号的时候,一旦更新很可能会炸掉。

    NPM 这种动不动几百上千个依赖的,真要认真管起来的话简直是噩梦。

    125 条回复    2022-01-11 21:35:04 +08:00
    1  2  
    yuthelloworld
        1
    yuthelloworld  
       2022-01-10 09:41:10 +08:00
    无语了
    sadfQED2
        2
    sadfQED2  
       2022-01-10 09:42:15 +08:00 via Android   ❤️ 4
    这就属于作恶了
    Rrrrrr
        3
    Rrrrrr  
       2022-01-10 09:43:15 +08:00 via iPhone
    npm 不能锁包真的……
    anonydmer
        4
    anonydmer  
       2022-01-10 09:44:29 +08:00
    每年都要看几个 npm 的瓜,前端故事就是多啊 /狗头
    FightPig
        5
    FightPig  
       2022-01-10 09:45:05 +08:00
    npm 的瓜一直没停过
    x86
        6
    x86  
       2022-01-10 09:47:31 +08:00   ❤️ 12
    前端娱乐圈就开始整活了
    stkstkss
        7
    stkstkss  
       2022-01-10 09:51:02 +08:00 via iPhone
    把 package 依赖里面版本号前面的^去掉
    cweijan
        8
    cweijan  
       2022-01-10 09:51:24 +08:00
    才知道这个 faker.js 的作者也是 colors 的作者, 这个周下载两千万, 牛
    Mithril
        9
    Mithril  
    OP
       2022-01-10 09:53:07 +08:00
    @stkstkss 麻烦的在于间接引用,你也不知道你哪个依赖库就引了它进来。。。。
    最好搜一下 node_modules 看看
    vone
        10
    vone  
       2022-01-10 10:00:40 +08:00   ❤️ 4
    chenmobuys
        11
    chenmobuys  
       2022-01-10 10:04:43 +08:00
    可以说是前端自己一手造成的,依赖的太多太深了,导致别人删除一个库,全崩了
    aboat365
        12
    aboat365  
       2022-01-10 10:05:23 +08:00
    发生什么事了,报复社会?
    7gugu
        13
    7gugu  
       2022-01-10 10:06:53 +08:00
    之前是不让大公司白嫖,现在做这种事情就是恶心同行人了啊!
    wonderfulcxm
        14
    wonderfulcxm  
       2022-01-10 10:08:03 +08:00 via iPhone
    这他喵的这个包管理机制就有问题
    wu67
        15
    wu67  
       2022-01-10 10:09:16 +08:00
    @wonderfulcxm 本来就是个沉重的历史包袱 hhh
    binux
        16
    binux  
       2022-01-10 10:11:04 +08:00   ❤️ 8
    project owner 有向自己的项目提交任何内容的自由 🐶
    SummerDruid
        17
    SummerDruid  
       2022-01-10 10:11:35 +08:00   ❤️ 45
    想起来一句中二名台词:“让世界感受痛楚”
    littleylv
        18
    littleylv  
       2022-01-10 10:13:28 +08:00   ❤️ 2
    贵圈真乱( doge
    proger
        19
    proger  
       2022-01-10 10:14:22 +08:00
    @vone 请教一下,for 循环删除一个分号就行了吗?这是啥原理啊
    hpuchenkai
        20
    hpuchenkai  
       2022-01-10 10:18:02 +08:00
    吓得我看了下项目,还好用的是 chalk
    Pastsong
        21
    Pastsong  
       2022-01-10 10:23:08 +08:00
    所以依赖版本记得用 fixed-version
    SingeeKing
        22
    SingeeKing  
       2022-01-10 10:26:16 +08:00   ❤️ 1
    paoqi2048
        23
    paoqi2048  
       2022-01-10 10:26:33 +08:00
    看来是为了引起更多人的注意
    yangzzzzzz
        24
    yangzzzzzz  
       2022-01-10 10:27:21 +08:00
    @proger 分号那个是格式化问题吧 应该是下面那个 i%333
    IsaacYoung
        25
    IsaacYoung  
       2022-01-10 10:30:39 +08:00 via iPhone
    娱乐圈
    crs0910
        26
    crs0910  
       2022-01-10 10:35:06 +08:00 via iPhone
    @yangzzzzzz 分号是语法错误。

    作者不是被 github 封号了吗,怎么还能提交?
    Jwyt
        27
    Jwyt  
       2022-01-10 10:37:10 +08:00   ❤️ 1
    @crs0910 谁说作者被 github 封号了啊
    vone
        28
    vone  
       2022-01-10 10:38:07 +08:00   ❤️ 5
    @proger 原来 for 循环括号前面的分号属于语法错误,会导致程序直接挂掉,他那个 "Fix bug" 提交修复的是语法报错,死循环仍然存在。
    (修复的是不能正常死循环的 bug ,所以这个提交仍然是个恶作剧)
    Henry007
        29
    Henry007  
       2022-01-10 10:38:46 +08:00
    贵圈真乱啊
    nojsja
        30
    nojsja  
       2022-01-10 10:38:56 +08:00
    suspend 应该是账户暂停的状态
    alexkkaa
        31
    alexkkaa  
       2022-01-10 10:40:04 +08:00 via Android
    作者好像家里失火失去财产 又被调查是否制造 boom 自己又受了伤 我猜他现在也找不到工作

    用爱发电持续不下去了
    Biwood
        32
    Biwood  
       2022-01-10 10:44:25 +08:00   ❤️ 19
    不觉得乱,也不觉得作恶,支持作者,话说 npm 体系现在才出现问题吗,那说明社区的自律性已经很强了
    gofishing
        33
    gofishing  
       2022-01-10 10:47:17 +08:00
    @Biwood 之前 npm 就有过删库事件. 然后一堆项目跑不起来.
    chuyik
        35
    chuyik  
       2022-01-10 10:53:00 +08:00
    今天就中招了,还好只是跑了个 demo
    mywaiting
        36
    mywaiting  
       2022-01-10 10:54:44 +08:00   ❤️ 19
    感觉会有一个很值得思辨(撕逼)的问题:

    我个人开源提交到 NPM 的包(被无数引用的包),是否还属于我个人?

    如果不属于我个人,这个包属于谁?

    如果不属于我个人,那么这个为啥是我提交以及开源维护?

    ~~~ 抛砖引玉 ~~~
    wsseo
        37
    wsseo  
       2022-01-10 10:55:07 +08:00
    开始整活
    SummerDruid
        38
    SummerDruid  
       2022-01-10 10:58:00 +08:00   ❤️ 19
    @Biwood 前几年就出过一次事故了。当时有个老哥 Azer 写了个叫 kik 的模块,结果和某家公司的产品重名了被发律师函威胁,Azer 老哥不答应,然后这家公司直接找 npm 公司处理,npm 直接不经这个作者的同意,擅自把这个 kik 包的权限转移给了这个公司,Azer 老哥一怒之下把所有自己写的 npm 包 unpublish 了,结果其中有个叫 left-pad 的模块被广泛使用,导致 Babel 、ReactNative 等大量工具构建失败,npm 公司最后赶忙灭火强制恢复了这个 leftpad 模块,而且还是不道歉,最后这件事貌似也就这么不了了之了。
    meteor957
        39
    meteor957  
       2022-01-10 11:11:04 +08:00
    娱乐圈名不虚传
    littleylv
        40
    littleylv  
       2022-01-10 11:18:26 +08:00
    @SummerDruid #38 不懂就问,npm 的包名不包含作者名字吗,比如 user1/kik user2/kik company1/kik ,所以 npm 库里只允许存在一个 kik 么,太先进了,太牛逼了,瑞思拜
    qxqsxbd
        41
    qxqsxbd  
       2022-01-10 11:24:24 +08:00
    @littleylv 最开始的时候只有全局的命名空间,一个人占了别人就用不了了,后来才出现个人命名空间
    SummerDruid
        42
    SummerDruid  
       2022-01-10 11:29:01 +08:00
    @littleylv 没错,就是你想的那样,npm 不使用你提及的作者名 /模块名的方式定位唯一模块,也不像 Maven 一样有 group 和 artifact 双重命名,它的包名唯一且先到先得。
    ccppgo
        43
    ccppgo  
       2022-01-10 11:33:00 +08:00
    难怪别人都说前端娱乐圈
    jasonkayzk
        44
    jasonkayzk  
       2022-01-10 11:33:47 +08:00   ❤️ 1
    刚开始搞前端的时候就感觉 npm 这个东西迟早会出问题…
    coderluan
        45
    coderluan  
       2022-01-10 11:35:36 +08:00   ❤️ 50
    之前很多人说当事人开源了就要做好心里准备,那么现在同样的之后用开源代码的人也要做好心里准备,Fair Play.
    ykk
        46
    ykk  
       2022-01-10 11:40:26 +08:00   ❤️ 1
    心理准备
    hengyunabc
        47
    hengyunabc  
       2022-01-10 11:41:55 +08:00   ❤️ 1
    所以拿到 npm 项目,第一时间把版本号全改为固定的,不然过几个月还能不能 build 就看烧高香了。

    没有办法理解为什么 npm 这么喜欢所谓的版本自动升级,这个不是把性命交别人手上么。
    hahastudio
        48
    hahastudio  
       2022-01-10 11:42:09 +08:00
    现在 npm 在我看来就是用对代码的控制来换取开发的便捷
    也许再出几个这样的事件,风险收益比就不行了
    otakustay
        49
    otakustay  
       2022-01-10 11:43:40 +08:00
    @mywaiting #36 属于你自己,你既有任意修改发布的权利,也有因为包带来危害而个人形象受影响的风险
    vanton
        50
    vanton  
       2022-01-10 11:49:03 +08:00
    支持作者,前端真乱。
    😁😂😃
    NCZkevin
        51
    NCZkevin  
       2022-01-10 11:54:24 +08:00
    @alexkkaa 看 github 评论里有说是作者本人在家里搞事情,结果把家给弄起火了,然后在推上乞讨。
    https://github.com/Marak/colors.js/commit/074a0f8ed0c31c35d13d28632bd8a049ff136fb6 这是我见过的 commit 里最长的楼,节目效果太强了
    Wincer
        52
    Wincer  
       2022-01-10 11:57:36 +08:00
    @Jwyt #27 他自己在推上说的被 GitHub 冻结了,https://twitter.com/marak/status/1479200803948830724
    proger
        53
    proger  
       2022-01-10 11:58:42 +08:00
    @vone 懂了 ,谢谢老哥~
    stevenhawking
        54
    stevenhawking  
       2022-01-10 12:02:52 +08:00
    以后开源项目都得提供一个 reputation score, 低信誉的人的项目, GitHub 、Npm 等社区和工具不予以推广.
    starrys
        55
    starrys  
       2022-01-10 12:24:20 +08:00
    哟,原来 npm 已经被 GitHub 收购了。
    来源: https://www.npmjs.com/about
    npm, Inc. is a company founded in 2014, and was acquired by GitHub in 2020. npm is a critical part of the JavaScript community and helps support one of the largest developer ecosystems in the world.
    123jiayue
        56
    123jiayue  
       2022-01-10 12:24:39 +08:00 via iPhone
    为什么做这种降低自己信誉的事 难到以后不干这行了
    ncepuzs
        57
    ncepuzs  
       2022-01-10 12:26:24 +08:00
    贵圈真乱
    acdfjelxe
        58
    acdfjelxe  
       2022-01-10 12:38:17 +08:00
    @SummerDruid 神罗天征 🐶
    v2lf
        59
    v2lf  
       2022-01-10 12:47:21 +08:00
    @proger 分号 会变成两个语句块,
    abersheeran
        60
    abersheeran  
       2022-01-10 12:50:04 +08:00   ❤️ 12
    开源运动作为地球上唯一一个还在运作的共产主义运动,现在看来无疑是失败的。在没有消灭资产阶级之前,一切所谓的国际主义、共产主义都只是在剥削同为无产阶级的人为资产阶级打工罢了。
    dianso
        61
    dianso  
       2022-01-10 12:50:48 +08:00
    作者网上要钱要了一段时间了,没人给钱,气得慌,凭什么你们都用我的项目赚钱,给你们个教训。
    forgottencoast
        62
    forgottencoast  
       2022-01-10 13:07:43 +08:00
    @123jiayue 大部分人知道他是谁吗? 他下次只要换个 Id 在发布,只要东西好一堆人用。
    daimubai
        63
    daimubai  
       2022-01-10 13:16:09 +08:00
    @yangzzzzzz 应该是是 Infinity ,在 js 中表示无穷大的意思,下面那个 i%333 不影响
    WeiShenMe
        64
    WeiShenMe  
       2022-01-10 13:18:03 +08:00
    支持作者
    linora
        65
    linora  
       2022-01-10 13:19:10 +08:00
    贵圈真乱
    fpure
        66
    fpure  
       2022-01-10 13:25:43 +08:00
    还是 rust 好,rust 的包提交到 crates.io 之后就再也不能修改和撤回
    ryh
        67
    ryh  
       2022-01-10 13:28:02 +08:00
    其实其他的包依赖一样会出这样的事,Go / Swift 这种依赖 GitHub 的也很危险,决定从今天起依赖全部 fork 😂
    qyzxgl
        68
    qyzxgl  
       2022-01-10 13:32:52 +08:00   ❤️ 1
    支持作者,资本家🙂😑🙄
    Jwyt
        69
    Jwyt  
       2022-01-10 13:33:12 +08:00
    @Wincer github 还有这种操作的吗,见识到了
    liaohongxing
        70
    liaohongxing  
       2022-01-10 13:37:42 +08:00   ❤️ 1
    Retool 抄袭 faker.js 作者的 faker cloud 的 CEO 回应 :

    https://news.ycombinator.com/item?id=27252331
    bwangel
        71
    bwangel  
       2022-01-10 13:48:55 +08:00
    傻逼才做开源
    wu67
        72
    wu67  
       2022-01-10 13:48:59 +08:00
    @ryh 别的不太清楚, 前端的 fork 不过来的, package.json 里面可能只写了 20 来个依赖, 但是依赖的包他也是有各种依赖的, 然后树形遍历套娃, 最好整个 node_module 里面的依赖可能有几百上千个...
    lm930129
        73
    lm930129  
       2022-01-10 14:02:36 +08:00
    @ryh go 并不是依赖 github ,只是依赖 git 这个东西做管理,你 fork 的包一样引用。
    yunyuyuan
        74
    yunyuyuan  
       2022-01-10 14:05:44 +08:00
    支持作者
    paopjian
        75
    paopjian  
       2022-01-10 14:16:30 +08:00
    一袋米要扛几楼
    daquandiao2
        76
    daquandiao2  
       2022-01-10 14:18:13 +08:00
    外国人也 666 ?
    karloku
        77
    karloku  
       2022-01-10 14:22:37 +08:00   ❤️ 2
    用 MIT License 就要做好被白嫖的准备. 这协议除了留个 Copyright 之外几乎什么都给出去了.

    用开源项目不锁好版本号, 不测试版本更新, 那后果也是自负. 外部依赖本来就是系统风险的一部分.
    skiy
        78
    skiy  
       2022-01-10 15:00:52 +08:00   ❤️ 2
    @ryh 哈哈。用 Go 时有碰到过一次七牛云某个 SDK 仓库删了,我自己再根据仓库名从别人 Fork 的项目补回来。

    说实话,这种事是不可避免的。

    有个 BaiduPCS-Go 的项目的主仓库被作者删了,我也直接从别的地方 fork 过来,作者名下的依赖我也全部 fork 过来为,并将主仓库的依赖也全改了。

    这种事情,怪不得作者了。有时候我自己也会删库,所以没有权利双标。

    现在我有些仓库是 0 fork 的,我会自己决定删不删。那些有 fork 的,我会看情况移到一个新建的“trans”组织里专门存放一些弃更的仓库。
    abcbuzhiming
        79
    abcbuzhiming  
       2022-01-10 15:06:33 +08:00
    所以为啥 npm 老出这种问题,这么久了,nodejs 社区还是建立不起一个依赖库审核机制吗?不是黑客入侵,就是作者删库
    majula
        80
    majula  
       2022-01-10 15:08:23 +08:00 via iPhone
    raysonlu
        81
    raysonlu  
       2022-01-10 15:31:06 +08:00
    nodejs 方案不选用的理由+1 ?
    2kCS5c0b0ITXE5k2
        82
    2kCS5c0b0ITXE5k2  
       2022-01-10 15:46:09 +08:00
    @daquandiao2 欧美文化圈厉害的 666 是撒旦的数字.
    2i2Re2PLMaDnghL
        83
    2i2Re2PLMaDnghL  
       2022-01-10 15:51:11 +08:00
    @karloku 你说的是除了留个 [Attribution] 以外都给出去了吧(
    hatsuyuki
        84
    hatsuyuki  
       2022-01-10 15:51:15 +08:00
    @abersheeran 人性如此,资产阶级消灭了只会产生新的权贵资产阶级,只要有管理关系,就会有阶级
    codder
        85
    codder  
       2022-01-10 15:59:57 +08:00
    我靠,我们的项目里也用到了
    xiaojun1994
        86
    xiaojun1994  
       2022-01-10 16:41:08 +08:00
    说的好像只有前端会遇到似的,依赖 github 仓库的包一大把,只要人家想,你照样会出事
    karloku
        87
    karloku  
       2022-01-10 16:43:47 +08:00
    @2i2Re2PLMaDnghL 对, 我意思 MIT 就只要求写个 "Copyright Notice" (翻译: 冤有头债有主(
    guanhui07
        88
    guanhui07  
       2022-01-10 16:44:45 +08:00
    不能锁包..
    LawlietZ
        89
    LawlietZ  
       2022-01-10 16:54:06 +08:00   ❤️ 1
    @abcbuzhiming 又不止是前端社区问题。。否则 log4j2 问题怎么出现的
    cloudzqy
        90
    cloudzqy  
       2022-01-10 16:56:24 +08:00
    @LawlietZ log4j2 是代码写出了漏洞,所有软件都会有这个问题。但是 npm 这个,只要有一个作者犯病,全体跟着遭罪。
    Felldeadbird
        91
    Felldeadbird  
       2022-01-10 17:08:09 +08:00
    npm 出问题不是一两天了。最灾难是接受维护老项目。很多东西不能乱动,真的贯彻了:“代码能跑就行”
    abcbuzhiming
        92
    abcbuzhiming  
       2022-01-10 17:24:26 +08:00
    @LawlietZ log4j2 是软件出了 bug ,哪家软件没 bug 呢? bug 又不是作者故意写的。可是 npm 的几次事件都是人故意作恶,不管是黑客入侵篡改代码,还是像这一次这样作者恶意删除代码。npm 给人感觉是完全没审核,没人管。
    pkoukk
        93
    pkoukk  
       2022-01-10 17:26:25 +08:00
    npm ci 可以锁包啊,但是一般没人用
    abcbuzhiming
        94
    abcbuzhiming  
       2022-01-10 17:26:26 +08:00
    @LawlietZ 前端社区有没有问题我不知道,但是 NPM 肯定有问题,我没见过哪家的包管理工具像这样跟没人管一样。
    reiji
        95
    reiji  
       2022-01-10 17:33:44 +08:00
    这事情一出估计会让人评估自己是否还真的需要搞个 bot 给自己的前端 repo 自动更新版本了,毕竟这个机制的前提建立在包更新都是给功能进行优化和增加安全性的信任上
    Mr54
        96
    Mr54  
       2022-01-10 17:59:08 +08:00
    看来这作者是想让这事闹大出圈啊,看看那些白嫖了他库的大公司会做什么反应,上面看到的那个 ceo 说已经给他们用的库捐了钱了,希望作者能继续生活吧
    cheng6563
        97
    cheng6563  
       2022-01-10 18:00:08 +08:00
    求原瓜
    LawlietZ
        98
    LawlietZ  
       2022-01-10 18:12:40 +08:00
    @abcbuzhiming Java 对于个人维护的包,如果他下毒,升级后也是有这个问题的
    NeezerGu
        99
    NeezerGu  
       2022-01-10 18:21:36 +08:00
    @vone delete this shit
    hahhahahahahah
    Jwyt
        100
    Jwyt  
       2022-01-10 18:58:48 +08:00
    @LawlietZ maven 依赖一般都是锁版本的,不像 npm
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5317 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.