event - stream事件如何体现代码自主可控?

1个回答

写回答

Pheonixxx

2026-02-10 17:04

+ 关注

JS
JS

近期看了两个案例,对代码自主可控有了更深的体会。其中一个是早年的event - stream事件,这个事件非常能体现当下开源社区存在的体制性问题。event - stream是node.JS里一个久负盛名的小模块,其每月的下载量达到千万级别。它只是一个基础功能模块,作者当初轻松写就,由于写得很棒,所以被广泛使用。然而,因其太过基础,与上层集成类的开源项目(如PostgreSQL、Vue.JS)不同,毫无商业价值。作者自己不再使用这个模块后,就不愿再管理这个项目了。这时有个黑客给作者发邮件,表示愿意接手这个项目,作者便将项目管理权转让给了这个黑客。之后,黑客就在项目中添加了恶意代码。这些恶意代码的作用是,当一个名为Copay的虚拟币钱包引用event - stream时,就会解密一段黑客代码来扫描文件,把运行机器上的钱包密码上传到黑客服务器,这是典型的定向攻击,代码解密的密钥就是包名(这还是后来的研究人员通过穷举得出的)。而且黑客为了不引人注意,手段非常巧妙,他将项目中的一段代码整体移除,替换成一个具有同样功能的名为flatmap - stream的项目。这看起来是不是很正常的操作?像是引入外部库、去除冗余。可这个flatmap - stream的末尾添加了恶意代码,简直是将社会工程学操作发挥到了极致。这件事发生在2018年。此事最大的争议点在于,没有人愿意为这么严重的事情负责。原作者说得很明白:我只是随手写了个代码,被大家使用,我自己很久不用这个代码了,也没从中赚到钱,凭什么要花大量时间去维护这个项目?其他上层项目也觉得自己很无辜。我们引用底层项目是为了节省时间,难道我引用一个十六进制转十进制的库,都要仔细做一遍安全审查吗?而且不仅在开发时要审查,以后包升级的时候也得审查。至于npm就更无辜了。npm不可能为了安全问题,就不帮助大家自动升级小版本,否则安全补丁怎么自动分发?一个项目引用几十个模块是常有的事,难道开发者要逐个查看每个模块是否有更新、更新是否需要升级吗?别的不说,大部分人修改一个bug,甚至都不会写在发行说明里,就算写了可能也表述不清,让人根本看不明白是什么意思。所以,整个开源社区实际上是为了效率在毫无防护地前行,而且没有任何机制可以加入安全控制,就算有钱也不太能处理好这些事情。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号