Gulp即将滑向Log4j2的深渊

Gulp

log4shell漏洞暂时平息之际,是时候注意其他类似log4j流行度极广而又非常缺乏维护的包了,在前端十分流行任务运行器gulp就是其中一个值得关注的对象。

查阅一下gulp的release,发现最后一次更新是2019年5月7日发布的v4.0.2,但请注意,从v4.0.0开始这就是一个破坏性的版本,连声明task的方式都发生了变化,task是gulp的基石,这种根基上的修改很难使人愿意对其进行升级,依然有很多人在使用v3.9.1,过去七天内它的下载量仍然高达30万次,在Github是查看这是一个2019年4月22日的版本,这一天gulp在12:56时同时发布了以下版本:

v4.0.1, v3.9.1, v3.9.0, v3.8.11, v3.8.10, v3.8.9, v3.8.8, v3.8.7, v3.8.6, v3.8.5, v3.8.4, v3.8.3, v3.8.1

这是非常糟糕的发布方式,怎么会有人在同一时刻发布这么多版本?这是不可能的,在npm上查一下原来v3.8.1发布于2014年6月18日,但gulp团队在2019才在Github上同步发行了它,这是因为gulp在2019年才开放源代码吗?当然不是,gulp2013年6月4日就建立了gulp,他只是一直无视Github的release,那时候gulp还是用coffeescript编写的,gulp早已全盘抛弃了coffeescript,如今它似乎连自己也要抛弃了。

由于npm设计的非常糟糕,参考npm-audit-broken-by-design,使很多开发人员不想去处理由npm报告的漏洞,很多微不足道的问题被打上criticalhigh的安全问题,他们也许真的写了非常危险的代码,但是这些危险是需要一个入口的,绝大多数情况下,这个入口只存在于幻想之中或是源代码被修改,这让大家都变成了惊弓之鸟。对此开发者们分为两派,一派彻底放弃npm的管理,将依赖包集成到内部,package.json变的干干净净,npm无法扫描到依赖项,由自己把控安全风险,这一派可以称为自信派。另一派则坚持传统,但对安全问题摆烂,禁止社区报告安全漏洞,坚持不修复安全漏洞。gulp就是传统派,即使有人写好了升级项#2630,gulp也拒绝merge,认为这些东西都是nothing的,还会破坏现状,现在安装gulp@v4.0.2,由于愚蠢的glob-parent,npm将报告6个高危漏洞,实际上gulp.src()gulp.watch()都有可能引发漏洞,把漏洞的入口交给了用户,他们说开发人员们应该清楚自己使用了什么路径,但如今时代不同很多路径也都是拼合而来的,gulp也早已进入了许多CI/CD中,gulp不再是一个“第一入口”,也在逐渐成为一个“中间件”,真的有必要保持这么多年的自信吗,升级glob-parent不会让gulp失去什么,只会让它变得健壮。

谈到CI方面,gulp的Appveyor CI失败已经两年多了,github对每次CI失败都会向contributors们发送失败的邮件,gulp的开发人员情愿收两年邮件也不愿意修复这样的错误,当然也可能早已拒收了来自gulp的邮件。令人惊奇的是,这个CI还在尝试在Node 0.10.48这种平台上运行gulp,而所尝试的最新的平台也仅是Node 10.24.1,面对如今的Node 17.4.0,它实在掉队太远太远了,不过也不用怀疑是否有效,Node也是热衷于破坏性更新的,已经有中国的开发者报告在Node 14 support上的问题了(存疑,我同样在Node14.x上跑gulp,watch部分从2020年底到如今都运行良好)。

尽管到目前为止gulp并没有出现较大的安全危机,但最后一次package升级,已经是2019年4月22日的一个commit,所直接或间接依赖的274个module,他们未来的安全性,随着gulp几乎停止的维护令人越来越感到担忧,同时对于平台的支持性,gulp越来越滞后,Node的LTS版本也从14升到了16,gulp还停留在10.x,未来这个项目即使要继续维护,也要经过很多大修大改,在生态方面,很多包还在用gulp早年推出的gulp-util,如今它已经被废弃5年之久,gulp-typescript在使用的ts版本为3.6.3,而现在的ts最新版是4.6.0,即使无力维护对typescript的支持,3.x的版本最新的也应该是3.9.7,gulp-typescript已经停更两年了,UglifyJS发布了v3.15.0,而还在使用v3.0.5的gulp-uglify已经停止更新3年多了,gulplog已经6年没有更新,连gulp自己都放弃了它,宁愿更多的使用console.log这样完全无法控制的东西,这个快速,支持并行的任务运行器还会持续存活吗?还是等来正式的停止维护通知?还是像Log4j2?

Log4j2从2018年3月到高危漏洞事发前夕3年半的时间总计不到1000个commit,比2013年到2018年间任何一年的commit量都要低,当一个基础项目的维护变得缓慢都将引发灾难,那么一个基础项目彻底停止呢?


Log4j2 contributors map

如果Gulp陷入这样的境地,和现在一样持续的无法支持新版node,无法支持新版ts,欠账越累越多,未来使用的人就会越来越少,那一直所依赖gulp构建的项目又将不得不换成与其相似的任务运行器Grunt,而Grunt与Gulp的差异极大,同时Grunt是笨重的,它通常产生临时文件,不像Gulp专注于stream的传输,且不能并行执行,是一种极大的限制,通常情况下Grunt 需要的时间几乎是 Gulp 的两倍,这场向下“升级”又是一场前端的领域的Log4j2式的灾难

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容