您JavaScript开源依赖项的安全性如何?

现代JavaScript开发人员喜欢npm。 GitHub和npm注册表是开发人员查找特定软件包的首选。 开源模块通过为开发人员提供可在项目中重用的大量功能来提高生产力和效率。 可以公平地说,如果不是这些开源软件包,那么今天的大多数框架都不会以其当前形式存在。

例如,成熟的企业级应用程序可能依赖于数百甚至数千个软件包。 通常的依赖关系包括直接依赖关系,开发依赖关系,捆绑依赖关系,生产依赖关系和可选依赖关系。 太好了,因为每个人都从开源生态系统中获得最大收益。

但是,被忽视的因素之一是涉及的风险量。 尽管这些第三方模块在其领域中特别有用,但它们也会给您的应用程序带来一些安全风险。

开源库容易受到攻击吗/h2>

OSS依赖确实确实容易受到攻击和妥协。 让我们看几个例子:

最近在一个名为eslint-scope的软件包中发现了一个漏洞 ,该软件包是babel-eslint和webpack等几种流行JavaScript软件包的依赖项。 软件包维护者的帐户已被盗用,黑客向其中添加了一些恶意代码。 幸运的是,有人很快就发现了该漏洞,据报道损害仅限于少数用户。

Moment.js是用于解析和显示JavaScript中日期的最常用的库之一,最近发现它的严重性得分为7.5 。 该漏洞使它容易受到ReDoS攻击。 补丁很快被发布,他们能够很快地解决该问题。

但这还不是全部。 每周都会发掘许多新漏洞。 他们中的一些人向公众公开,但其他人只有在严重违规后才成为头条新闻。

那么我们如何减轻这些风险呢在本文中,我将解释一些可用于保护开源依赖项的行业标准最佳实践。

1.跟踪应用程序的依赖性

从逻辑上讲,随着依赖关系数量的增加,使用易受攻击的程序包终止的风险也会增加。 对于直接和间接依赖关系同样如此。 尽管没有理由不应该停止使用开源软件包,但是跟踪它们始终是一个好主意。

这些依赖关系很容易发现,就像在应用程序的根目录中运行一样简单。 您可以使用其中显示了所有生产的依赖和参数为每个包描述的总结论点。

此外,您可以使用一项服务来自动化依赖项管理过程,该过程为依赖项提供实时监视和自动更新测试。 一些熟悉的工具包括GreenKeeper , Libraries.io等。这些工具整理您当前正在使用的依赖项列表,并跟踪有关它们的相关信息。

2.摆脱不需要的软件包

随着时间的流逝和代码的更改,很可能您将完全停止使用某些软件包,而是添加了新软件包。 但是,开发人员往往不会删除旧软件包。

随着时间的流逝,您的项目可能会积累许多未使用的依赖项。 尽管这不是直接的安全风险,但是这些依赖性几乎可以肯定会增加您项目的攻击面,并导致代码中不必要的混乱。 攻击者可能能够通过加载具有较高漏洞商数的旧但已安装的程序包来发现漏洞,从而增加其可能造成的潜在破坏。

您如何检查这种未使用的依赖关系您可以在depcheck工具的帮助下执行此操作。 Depcheck扫描整个代码和的命令。 然后,将这些命令与已安装的软件包或package.json中提到的软件包相关联,并为您提供报告。 还可以使用不同的命令标志来修改命令,从而使自动检查未使用的依赖项变得更加简单。

使用以下命令安装depcheck:

3.查找并修复重要的安全漏洞

上面讨论的几乎所有要点都主要与您可能遇到的潜在问题有关。 但是,您现在正在使用的依赖项又如何呢

根据最近的一项研究, 当前几乎有15%的软件包在组件或依赖项中都包含一个已知漏洞。 但是,好消息是,您可以使用许多工具来分析代码并查找项目中的开源安全风险。

最方便的工具是npm的 。 Audit是随npm版本6发布的脚本。Node Security Platform最初开发了npm audit,后来npm Registry获得了它。 如果您想知道什么是npm审计,请参考官方博客的引文:

安全审核是对程序包依赖关系的安全漏洞的评估。 安全审核使您能够查找和修复依赖关系中的已知漏洞,从而帮助您保护程序包的用户。 npm audit命令将对程序包中配置的依赖项的描述提交给默认注册表,并要求提供已知漏洞的报告。

生成的报告通常包含以下详细信息:受影响的程序包名称,漏洞严重性和描述,路径以及其他信息,以及(如果有)应用修补程序来解决漏洞的命令。 您甚至可以通过运行获得JSON中的审计报告。

除此之外,npm还提供有关如何根据报告采取行动的帮助。 您可以使用来修复已发现的问题。 这些修复程序通常使用指导性升级或通过开源补丁来完成。

请随时参考npm的文档以获取更多信息。

4.用内部替代品替换过期的图书馆

开源安全性的概念在很大程度上取决于监视该特定库的人数。 积极使用的软件包会受到密切关注。 因此,开发人员更有可能解决该特定程序包中的所有已知安全问题。

让我们举个例子。 在GitHub上,可以将许多JSON Web令牌实现与Node.js库一起使用。 但是,那些未处于主动开发中的漏洞可能具有严重漏洞。 一种这样的漏洞( 由Auth0报告)使任何人都可以使用所需的有效负载创建自己的“签名”令牌。

如果合理流行或使用得当的软件包存在此缺陷,则开发人员发现并修补错误的几率会更高。 但是,一个不活跃/被遗弃的项目呢接下来,我们将讨论这一点。

5.始终选择处于活跃开发中的库

确定特定软件包活动的最快,最有效的方法可能是在npm上检查其下载速率。 您可以在npm软件包页面的“ 统计信息”部分中找到此内容。 也可以使用npm stats API或浏览npm-stat.com上的历史数据来自动提取这些数字。 对于具有GitHub存储库的软件包,您应该检查提交历史记录,问题跟踪程序以及对该库的任何相关提取请求。

6.经常更新依赖关系

有很多错误,其中包括不断发现的安全漏洞,并且在大多数情况下会立即对其进行修补。 看到最近报告的漏洞仅固定在给定项目的最新分支/版本上并不少见。

例如,让我们以2016年初HMAC软件包“ hawk”中报告的正则表达式拒绝服务(ReDoS)漏洞为例。Swift解决了hawk中的此错误,但仅在最新的主要版本4.x中。 即使较老的版本(如3.x)也同样受到威胁,但它们后来也进行了修补。

因此,作为一般规则,如果依赖项使用最新的可用版本,则它们不太可能出现任何安全错误。

确认是否使用最新版本的最简单方法是使用命令。 此命令支持标志以忽略任何开发依赖关系,而支持使自动化更简单。

定期检查您用来验证其修改日期的软件包。 您可以通过两种方式执行此操作:通过npm UI或运行 。

结论

保护您的应用程序的关键是从一开始就具有安全至上的文化。 在本文中,我们介绍了一些用于提高JavaScript组件安全性的标准做法。

如果您对JavaScript安全性有任何想法,请随时在评论中分享。

翻译自: https://code.tutsplus.com/articles/how-secure-are-your-javascript-open-source-dependencies–cms-31685

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91472 人正在系统学习中 相关资源:LibraryO:图书图书馆软件。-开源_图书馆开源目-其它代码类资源…

来源:cunjie3951

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月17日
下一篇 2020年5月17日

相关推荐