【NodeJS】3 种确保开源Node.js依赖包安全的方法
随着Node.js应用程序的规模和特性的扩展,它们的依赖关系也会扩展。为了让Node.js应用程序能够正常运行,你还需要测试框架、UI框架、数据库客户端、像Express这样的MVC库等等。
然而,**黑客们正越来越多地瞄准这类依赖关系,发起链式攻击,将恶意代码注入第三方软件。**研究人员还发现,配置不良的构建过程使应用程序更容易受到这类攻击。
在这篇文章中,我们将回顾三种工具,它们是最近开源的,用于提高Node.js依赖的安全性,包括Socket、Node-Secure CLI和N|Solid。让我们开始吧!
什么是开源依赖关系?
**如果源代码可供任何人查看、修改或改进,则该软件被认为是开源的。**任何人都可以访问和使用源代码,或者增强原始软件,或者创建完全不同的东西。流行的托管服务如GitHub托管了许多这样的开源项目。
当开发人员决定在他们的应用程序中使用另一个软件包中已经存在的特性,而不是从头开始编写它时,原始包就会成为他们自己项目中的依赖项。
开发人员经常选择开源依赖项,因为它们是免费的。开发人员可以访问源代码,这意味着他们可以查看包是如何构建的。他们可以添加他们认为合适的特性,自己重新发布,或者甚至联系开源项目的原始作者,将他们添加的特性合并到现有代码中。
然而,偶尔会有一些附加到开源依赖项的许可证,对使用该依赖项的软件能做什么和不能做什么造成一些限制。例如,有些许可证不允许开发人员销售利用开源依赖关系的软件。因此,检查开放源码许可证并确保项目是兼容的是很重要的。
npm是Node.js的包管理器。它创建于2009年,是一个开源项目,帮助JavaScript开发人员轻松地将打包的模块作为依赖项共享。
开源的依赖关系是无价的,也是有风险的
许多软件开发团队依赖于开源依赖来实现身份验证等特性,从而加快了整体开发时间。然而,使用这些依赖项可能会使项目暴露于攻击,使它们面临嵌入恶意软件的风险。
依赖关系可以分为传递性依赖和直接依赖。直接依赖项是你的代码直接引用的库,而传递依赖项是你的依赖项链接到的库。本质上,传递依赖性是您的依赖性的依赖性。由于传递依赖,开发人员经常不知道他们正在使用的开源库的数量。
根据Veracode
进行的研究,在2020年被访问的85000个应用程序中,71%
在初始扫描时在开源库中有一个漏洞,47%
的缺陷来自传递依赖。JavaScript应用程序是罪魁祸首,占这个数字的87%。
**当您安装一个依赖项时,您也导入了它的所有问题,比如安全缺陷甚至bug。**例如,如果用于生成用户详细信息的开源库有跨站点脚本漏洞,那么您的整个软件都是脆弱的,使您和您的用户处于数据被盗的风险中。作为开发人员,您有责任确保其他人编写的代码不会使您的系统变得不安全。
确保开源Node.js依赖的安全性
对开发人员来说,跟踪应用程序中使用的每个依赖项(包括直接依赖项和传递依赖项)是很重要的。如果开发人员不知道他们正在使用的依赖关系,他们就无法在开源安全性和许可证遵从性问题上保护自己。
**定期的代码检查对于开发团队跟踪依赖关系以及项目中依赖于它们的部分是很有帮助的。开发人员应该始终注意他们所使用的软件包的安全公告。**当有新的更新时,更新依赖关系也是一个很好的实践,密切关注补丁版本,它有时会修复已经报告的漏洞。
前述Veracode的研究报告称,**75%的已知缺陷可以通过对代码进行小的修改或补丁来轻松修复。**然而,开发人员也可以使用工具来扫描依赖关系树以发现安全风险。有许多工具可以集成到应用程序的构建过程中,并检测软件中的所有开源组件,生成关于许可、库存和安全性的报告。让我们回顾一下最流行的三种。
1. Socket
根据其文档,Socket
可以在受到攻击之前检测并阻止它们,防止最坏的可能结果。Socket在包及其所有依赖项(包括传递依赖项)上运行静态分析,以查找特定的风险标记。它使用深度包检查来剥离依赖层,并描述其实际行为。
套接字通过防止任何被破坏或劫持的包渗透到您的供应链来确保安全性。它监视对package.json
的实时更改,检测依赖更新是否引入了新的有风险的api,包括网络、shell、文件系统等等。最后,它可以阻止开源代码中的任何危险信号,包括恶意软件、错字占用、隐藏代码、误导包、权限蔓延等等。
Socket不仅可以检测依赖项中的漏洞,还可以提供关于依赖项风险的可操作反馈。要使用Socket,安装Socket GitHub应用程序来获得实时依赖扫描和报告每一个pull
请求:
2. Node-Secure CLI
Node- secure CLI
是来自NodeSecure
的一个Node js
命令行工具。它获取并深入分析给定npm包或带有package.json
的本地项目的依赖树,输出一个.Json
文件,其中包含关于每个包的所有元数据和标志。CLI能够打开JSON代码并显示网络中的所有依赖关系,帮助你识别潜在的安全威胁和问题:
有了生成的数据,就有可能快速识别跨项目和包的不同安全性和质量问题。Node-Secure CLI
包可以在npm
上使用。你可以使用下面的命令轻松安装它:
npm install @nodesecure/cli -g
安装后,nsecure
的二进制文件将在终端中可用。要查看所有可用的命令,请运行nsecure --help
。
3. N|Solid
N|Solid
是来自NodeSource
的一个可观察和洞察工具,用于管理Node.js的性能和安全。有了N|Solid
,数据直接从您的应用程序架构和堆栈收集,然后以一个清晰的、用户友好的方式显示在N|Solid
控制台。
通过一系列测试,npm包被评分,让开发人员了解他们的软件面临多大的风险,以及如何降低风险。Node.js包的评估依据是安全性、合规性和代码质量。
结尾
对于开发人员来说,更好地认识到他们对项目的依赖关系,从而减少黑客将恶意代码插入到开放源码依赖关系中的可能性。
为您的团队创建开放源码使用策略,监视开放源码依赖项的使用情况,以及寻找新的漏洞,将有助于极大地提高开放源码依赖项的安全性。
在本文中,我们回顾了Socket、Node-Secure CLI和N|Solid,这三种开源工具用于运行项目中可传递和直接依赖项的安全性报告。这些还可以帮助您审查许可和库存,防止您和应用程序用户将来遇到麻烦。