开源项目中的安全相关代码?

信息安全 开源
2021-09-01 18:29:52

我最近听说大部分 PHP 代码都是机密的,因为如果攻击者知道您的数据库结构或用于加密密码的哈希函数,那么泄露的可能性就更高。

我想知道,如果是这样,那么开源项目的一切都是公开的呢?

3个回答

这被称为“通过默默无闻的安全性”,对于大多数(如果不是全部)目的来说,这通常被认为是一种糟糕的安全模型。

有两个主要术语关注这个概念:

克尔霍夫原理

一个密码系统应该是安全的,即使系统的所有内容,除了密钥,都是公共知识。

克劳德·香农后来用更通用的术语重新表述了这一点,作为香农的格言

敌人知道系统。

关键是安全应该来自可靠的安全概念,而不是试图隐藏信息和算法。强大的加密操作确保了安全性,而私有代码只确保了默默无闻。

我最近听说大部分 PHP 代码都是机密的,因为如果攻击者知道您的数据库结构或用于加密密码的哈希函数,那么泄露的可能性就更高。

仅当设计人员不使用正确的哈希函数或保护 webapp 免受 SQL 注入时。但是这些东西很容易被检测到,现在有一些自动化工具可以通过源代码查找 SQL 注入漏洞(而不是指向sqlmapwebapp)

如果你使用 scrypt 之类的东西,你可以完全安全地告诉每个人你使用它。

MediaWiki 曾经使用加盐的 MD5 哈希。salt 是特定于安装的,而不是开源代码的一部分(它在安装时生成)。这并不安全(每个用户的盐和使用更好的散列算法会更好),但只要不暴露 LocalSettings 文件,它仍然是安全的。(诚​​然,这不是一个很好的安全级别)。认为 Drupal 也这样做,但使用 sha512。

我想知道,如果是这样,那么开源项目的一切都是公开的呢?

默默无闻的安全不是安全。如果将代码公开会影响安全性,那么您首先就没有任何安全性。

此外,如果代码中存在安全漏洞,这些漏洞也会被贡献者捕获。例如,我最近在 Bugzilla 软件中发现并修补了一个与安全相关的错误。

最近听说大部分PHP代码都是保密的

这似乎是不正确的。至少,大多数 PHP 对任何分发它的人都是未混淆的和可读的。

因为如果攻击者知道您的数据库结构或用于加密密码的散列函数,则泄露的可能性更高。

也不正确。数据库结构和散列函数都不是构建初始漏洞的关键。这些可能在违规有用,但在生成初始攻击时重要的是了解站点代码中的某些缺陷或漏洞。

拥有源代码有助于发现安全漏洞(参见:Wordpress 和 Joomla 插件),这并不是必需的。事实上,大多数有趣的漏洞(Windows、Flash、Internet Explorer、Acrobat 等)都是在不借助源代码的情况下发现的。

使您的项目开源可以使第三方更容易审核代码(无论是否经过您的许可),这应该会导致更早地发现错误和漏洞,并有望使它们更快、更容易修补。

假设您的项目足够受欢迎以得到合理数量的审查,这应该意味着一旦完成初始发现和审查期,您的项目就不太可能存在重要的安全漏洞。很难获得这方面的良好数据,但一些证据表明,流行的开源软件不太可能存在那些存在且活跃但几十年未公开的“休眠”漏洞。