这是一个复杂的问题,因为有几个方面需要考虑,有利有弊,并且可能没有明确的答案。
开源软件的安全优势应该来自维基百科称之为“Linus 定律”的“定律”,即“只要有足够的眼球,所有的 bug 都是浅的”。首先,您必须问自己将拥有多少个眼球。例如,您的项目是否将被大量用户共享、分叉、广泛使用并由大型社区进行审查?还是您的软件只会在您的网站上使用而没有其他人会关心它?或者也许没有其他人能够重复使用它,因为它没有附带自由软件许可证?最终会有白帽眼球和黑帽眼球,所以你需要愿意接受一方面你会从道德黑客那里得到一些安全改进,但另一方面,您也会受到黑帽子的攻击。攻击者是否会对针对您的项目特别感兴趣,还是只会受到非针对性攻击?这些都是你应该考虑的事情,可能并不容易得出结论。还值得记住的是,在几个开源项目中,尽管社区的所有眼球都存在安全漏洞,但这些漏洞已经存在了很长时间(参见维基百科上的莱纳斯定律)。
默默无闻的安全性是另一个经常被误解的概念,因为它的名字听起来就像是为了保密。不是这样的。通过默默无闻的安全性是指您的安全性的重要部分来自方法(实现)的保密性。这是一个默默无闻的安全示例:
// Login without password if URL has parameter dev=debug
// I'm a stupid dev, so I believe this is secure because nobody knows about it!
// But this source code can't be published or I'll be hacked at once
if ($login_password === $password || $_POST['dev'] === 'debug') {
login_ok();
}
无论如何,即使您的代码是正确的并且您在设计上依赖于安全性,也没有什么能阻止您在其之上使用一层混淆。也就是说,将源代码保密可以帮助您,因为它会减慢潜在攻击者的速度。要记住的重要一点是,默默无闻是可以的,只有当它只是良好设计之上的一层时,它才能被视为一项重要资产。
总之,我会说你最好不要发布源代码,除非你有理由这样做(例如,因为你希望你的软件是免费的/自由的并且你想围绕你的项目创建一个社区)。例如,如果您的唯一目标是提高应用程序的安全性,那么仅在 GitHub 上发布它就不会获得任何好处。如果您真的担心您的软件可能包含错误并且您希望其他人通过提供更多“眼球”来帮助您,您可以考虑支付专业的安全审计费用。