那个开源项目可以安全使用吗?- 以下是如何知道的
开发任何类型的软件都不可避免地会涉及到对开源项目的依赖。但是,鉴于外面有数以百万计的开源项目,而你本人对它们的源代码或安全实践一无所知,你怎么知道你刚拉进项目的代码是否安全?
当涉及到安全问题时,没有完全安全的软件这回事。所有这些都是关于管理风险和对你选择包含在你的项目中的软件做出明智的决定。对我来说,坐在这里说 "你需要审查进入你的项目的每一行代码 "是非常容易的,但简单的事实是这几乎是不可能的。因此,我想与你分享我在评估开源包、API和SDK时遵循的软件审查的五个阶段。
审查的第一部分就是我所说的 "它是否受欢迎 "阶段
因为,让我们在这里说实话,如果该项目得到了大量的使用,那么它就更有可能得到很好的维护,其他人可能会发现、报告和修复该项目中的安全问题,否则这些问题就不会被纠正。
今天,几乎所有的语言都有某种系统来拉入依赖关系。对于Go来说,它是Go模块。对于javascript项目来说,是NPM。对于Php来说是composer,对于java来说是maven或Gradle或其他任何你可能从木头缝里拉出来的java垃圾(我在开玩笑,java人,互联网仍然爱你)。这些软件包管理器的网站是调查你的依赖关系的安全性和行为的一个好地方。
看一下使用该包的其他项目的数量。这个数字并不总是百分之百的准确,但如果它是一个相当大的数字,你使用这个依赖关系要比你在互联网的深层角落里发现的那个只有5个用户和0个报告问题的随机包好得多。0个报告的问题不是一件好事,我保证!
另外,要确保该软件包最近被使用过。一年前有一万次下载,但在过去六个月中没有,这肯定是一个迹象,说明这个包已经过时或没有维护,你可能想在其他地方寻找替代品。
好了,现在你可以看到这个项目有多受欢迎了。下一步是 "它被维护了吗?"阶段
从项目的页面,找到源代码的链接。点击该链接,进入源代码库。大多数项目都会使用GitHub,所以我将用它作为例子,但你可以在几乎任何git repo网站上找到许多相同的细节,如bitbucket或GitLab。
在项目的GitHub页面上,有几个关键的东西需要检查。
首先,项目上有多少贡献者。这也是该项目活动的一个很好的指标。
其次,它有多少星星和观察者?是否有很多人把这个项目放在书签上,以便他们能够返回到源代码?
接下来,该项目是否有一个公开的问题队列?如果有的话,请看一下。看看那里有什么东西。总会有一些错误和功能请求,但是否有什么可疑之处?是否有未解决的安全问题,或者是否有开发者在抱怨几个月来没有人合并他们的东西?这些都是需要注意的迹象。
在你离开问题队列之前,快速浏览一下已关闭的问题。看看离一个问题被关闭有多长时间了。看看哪些类型的问题已经被解决。你要特别寻找项目的健康活动量,这表明它被积极维护,人们真正关心软件包的安全和功能。
下一步是 "是否考虑了安全问题?"阶段
看看该项目是否在其项目上激活了 "安全 "标签。有些会公开显示已知的漏洞。其他的会有一个安全建议的列表或一个安全政策。在这个标签中的任何内容都可能是一个好的迹象,表明维护者关心安全问题。
有些项目甚至会在其readme中注明如何报告安全问题。大多数开源项目都希望在问题被公开宣布之前,他们能有机会修复它(有充分的理由)。如果你正在审查的项目有这样的规定,这也是一个非常好的迹象。
作为最后一步,你也可以对项目的实际源代码进行审查。现在,我知道有时这些项目很庞大,你不可能审查整个项目,但看看你想使用的部分也无妨。特别是如果你需要的功能是关键性的。
作为最后一步,这并不适用于每个项目,你可以查看第三方网站的赏金计划。像huntr.dev这样的网站报告需要解决的已知问题。
最后,也许是最重要的,检查互联网上许多CVE数据库中的一个。我最喜欢的是osv.dev/。只要输入软件包的名称,就可以看到针对该项目提出的CVE的历史记录,最重要的是它是否被修复了,花了多长时间。该网站将列出原始报告的URL,这样你就可以查看更多的细节和解决方案。
最后一步是 "是否有必要"?阶段
嗯,这是个好问题,值得调查。就在前面我提到,许多依赖关系是大的,有一大堆的功能。一般来说,拉入另一个项目的目的是利用它的能力,而不是重新发明轮子。在这种情况下,如果这个项目是大的,几乎是更好的,因为如果它是小的,也许你甚至不需要它。
如果你发现你认为你需要的东西,因为你自己不知道怎么做,也许你可以只看那个项目的源代码,挑出你需要的部分,然后自己写,复杂程度会降低。例如:如果你只需要做一个简单的POST,你真的需要整个Axios javascript包吗?也许不需要。
最后,现在我们有了 "维护 "阶段
好了,现在你已经完成了你的功课并安装了软件包。现在怎么办?好吧,安全永远不会结束,所以确保你正在做一些事情来监控你所安装的所有依赖。最简单的方法是在你的项目上启用Dependabot警报。它将自动扫描你的锁定文件,以获得你使用的所有项目的列表,并产生一份关于你的依赖关系中任何已知的报告安全问题的报告。它甚至会提出将你的项目自动更新到项目的最新版本,并为你解决安全问题。
好了,我想我就不说了。如果你能花一点时间,在导入软件包之前做这些步骤,它可能会在未来为你省去一大堆麻烦。如果你对开放源代码感兴趣,也许可以看看这篇文章。直到下一次,祝你编码愉快!
那个开源项目可以安全使用吗?-以下是如何知道的最初发表在Dev Genius的Medium上,在那里人们通过强调和回应这个故事来继续对话。