我想知道如何确保开源项目中代码的安全性,尤其是那些有数千行代码的项目,包括对popen()
或system()
. 我怎么知道那里没有有害和恶意代码?无论如何我可以安全地检查代码吗?
4 回答
我想知道如何确定开源项目中代码的安全性
简短的回答是你不能。
是的,理论上,您可以检查整个代码库并对其进行审核,而使用专有代码则无法做到这一点,但是谁有时间呢?另一方面,许多较大的项目往往有大量的志愿者贡献者一直在注视着代码,而运行它们的组织(例如 Apache 和 GNU)表面上具有良性动机,所以我认为恶意代码可能会很快就能找到并标记。
话虽如此,我可以想到一个完全灾难性的安全漏洞,它影响了开源软件并且在两年内未被检测到。它的出现正是因为第三方有可能修改一个极其复杂(并且写得不好)的开源产品。进行修改的人不明白他们在做什么。当他们可以阅读代码时,谁会想到这是可能的......
您永远无法 100% 确定任何项目的任何代码的安全性,无论是否开源。在使用不是您自己编写的任何代码或软件时,您不可避免地会假设第三方作者有一定程度的信任。如果项目是开源的,您可以根据自己的意愿审核他们的代码,但正如其他响应者已经指出的那样,您不太可能有时间/资源来执行完整的逐行检查。
您可能会发现 Ken Thompson 的“对信任的反思”文章很有趣,可以进一步思考以下问题:
因为它是开源的,所以您可以检查代码。与其他人一样,因此安全性可能比封闭源代码的安全性要好得多,在封闭源代码中,(非常)有限数量的人可以看到代码。您的版本控制系统 (git) 计算校验和以检测更改的代码。
通常在源代码上寻找十分钟就足以决定不信任软件。在有许多替代品的地方,这就足够了。
我还应该补充一点,开源项目中明显(并且理论上是可验证的)缺乏恶意代码并不能保证它们的安全性。
原因是可被恶意输入利用的安全漏洞。
例如,您最喜欢的开源图片/文档/任何查看器(或 Web 浏览器)可能存在一个或多个这些错误。如果您使用它打开恶意制作的文件,您可能会被盗用。
虽然我不能肯定地说开源软件比商业软件有更多的安全漏洞,但我会警告你,如果它不是一个非常受欢迎的项目,并且如果没有人为它的安全缺陷负责,导致你上当,很有可能存在这样的错误,并且很少有人对它们感兴趣并修复它们。我的意思是,程序员喜欢构建。好有趣。安全性很难,而且通常是次要的。