现代的 JavaScript 开发人员都喜欢 npm。GitHub 和 npm registry 是开发人员在查找特定软件包时常去的地方。开源模块为开发人员提供了很多可在项目中重用的功能,帮助他们提高工作效率。可以说,如果不是这些开源软件包,今天的大多数框架都不会以当前的形式存在。
一个成熟的企业级应用程序可能依赖数百个(如果不是数千个)软件包。通常的依赖包括直接依赖、开发依赖、捆绑依赖、生产依赖和可选依赖。
然而,人们通常忽视了存在软件包中的风险。虽然这些第三方模块在某些方面特别有用,但也会往你的应用程序中引入一些安全风险。
开源库是否有漏洞?
OSS 软件包确实存在漏洞,容易遭受攻击。我们来看几个例子:
最近在一个名为 eslint-scope 的软件包中发现了一个漏洞,它是一些流行的 JavaScript 软件包(如 babel-eslint 和 webpack)的依赖项。这个软件包维护者的帐号遭窃取,黑客在其中添加了一些恶意代码。所幸的是,有人很快发现了这个漏洞,最后只影响了少数几个用户。
Moment.js 是用于解析和显示日期的常用 JavaScript 库之一,最近出现了一个漏洞,严重性评分高达 7.5。这个漏洞容易遭受 ReDoS 攻击。不过他们很快发布了补丁, 问题也将很快得到解决。
5 月份,npm 中出现了一个伪装成 cookie 解析器的后门程序, NPM 在接到投诉后迅速将其移除,好在没有造成任何真正的破坏。
今年早些时候,GitHub 就开始提醒开发人员他们的代码中包含不安全的库。
GitHub 平台负责人 Sam Lambert 在最近的媒体采访中表示,他希望能够通过机械化提交的方式来自动化代码提交流程,从而检测