为什么最近几年类似 faker.js 这样作者在开源包下毒的事件都发生在 Node.js?是其它语言的包管理器有什么预防这种行为的机制吗? Python 的 pypi 包作者可以在不改版本号的情况下换包吗?
pypi 包版本号一样不给传的
恶劣结果已经消除,faker.js 已经被社区挽救回来了啊
#2 那 npm 社区有采取什么措施防止(其它作者)这种情况再次发生了吗,现在不是大公司的 npm 包都不敢装了
NuGet 是上传了就不能改,连删除都不允许
现在吃的都是科技与狠活,是不是所有吃的都不能吃了。
C++很有效地预防了包管理器引入依赖投毒的问题,因为 C++就没有包管理器。
npm 有 lock 机制所以供应链投毒顶多只影响开发阶段。
如果有更进一步的需求你可以维护一个私有 npm registry ,只存你信任的包版本。只不过每次升级社区依赖版本都要人工审核。
#6 npm 作者有可能上传同版本号包覆盖已有包吗
每个版本更新都等三月再用。
这让我想到,你可以开一个公司,公司提供一个收费的 npm registry ,这个 npm registry 上所有的包都是你让员工人工审核过的无毒代码,名字可以叫 trusted registry 。用你这个公司的 registry 的用户要按流量和按月订阅付费。
首先,这和同版本号没有一毛钱关系。社区开发者上传一个 minor version release 就行了。在产物构建和部署阶段,有 lock 机制所以和版本号没有关系。
其次,2014 年 2 月以后 npm 不允许上传同版本号。
pypi 上一堆只差一个字符的投毒。
pypi 上也有不少包在里面下毒,包括但不限于偷本地证书、偷 token 、偷密码……
www.bleepingcomputer.com/news/security/10-malicious-pypi-packages-found-stealing-developers-credentials/
npm 也是不允许覆盖同版本的,但很多开发者没有用 package-lock ,导致新版本会被装上去
自己不锁版本,关作者后续更新什么事。
就算作者无恶意,只是大版本更新推出新的 API ,不兼容旧 API ,你不锁版本一样完蛋
白嫖就要有白嫖的觉悟,开源只是提供当前版本,不是提供长期支持服务
理论上来讲, 一个领域 /一个编程模式 如果要依赖三方的包进行, 那就会有这类的风险.
事实上开源只是公开源代码, 但是并没有多少人会去完整阅读它, 也没有多少人能去完整阅读它, 人的精力是有限的, 并且绝大多数开源项目都没有一个完善的技术文档、甚至有些连注释都没有, 要去理解这么多代码实在是太难了.
除非是知名社区或者商业公司像 Mozilla 微软 苹果 Linux 这样的进行背书、来搞‘官方’一点的开发生态, 其他的小团队 /个人开发者项目多少都会有风险. 而个人开发最容易造轮子的语言 /领域是哪些呢? 答案是 JS / Node / 前端.
所以生态百花齐放的, 相对的爆炸的概率就会高很多; 生态较单一、由唯一组织进行维护的, 又容易陷入一个版本跑到天荒地老的情况, 例如 Java jdk8, c 艹 9, Windows xp / 7, 典型的又不是不能用, 升级什么
所以新轮子还是过段时间再用比较好
flutter 的 pub 引包也是^,所以也有类似的可能。
我使用过一个关于平台权限的包,由于当时 android 正好有新的大版本,所以那个包有更新且我自动更新了。由于我本地的 sdk 没有升级,导致不匹配然后报错。
没有版本控制和升级评估的吗?
打个广告,我司开源的一个 SCA 工具 [OpenSCA]( github.com/XmirrorSecurity/OpenSCA-cli
可以自己维护漏洞库或者用我们云端的库。
供应链安全是个很大的话题,希望这个工具能帮到需要的人。
手册
“其它语言的包管理器有什么预防这种行为的机制吗?”
把库 Fork 出来,只引用 fork 后的仓库。
Long Live jQuery
:/doge
现在做Web上的效果,主要是有三种方法,Flash,Javascript 和 HTML5。Flash就不用多说了,Javascript的效果也越来越猛了,如果配上HTML5,那…
我希望本文有助于你了解测试软件是一件很重要也是一件不简单的事。 我们有一个程序,叫ShuffleArray(),是用来洗牌的,我见过N多千变万化的ShuffleArray(),…
自从 Typora 开始收费之后,我彻底转向使用 VS Code ( Visual Studio Code ) 进行文章撰写。作为一款 Markdown 编辑器,它已经完全满足…