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