我最近听说大部分 PHP 代码都是机密的,因为如果攻击者知道您的数据库结构或用于加密密码的哈希函数,那么泄露的可能性就更高。
我想知道,如果是这样,那么开源项目的一切都是公开的呢?
我最近听说大部分 PHP 代码都是机密的,因为如果攻击者知道您的数据库结构或用于加密密码的哈希函数,那么泄露的可能性就更高。
我想知道,如果是这样,那么开源项目的一切都是公开的呢?
这被称为“通过默默无闻的安全性”,对于大多数(如果不是全部)目的来说,这通常被认为是一种糟糕的安全模型。
有两个主要术语关注这个概念:
一个密码系统应该是安全的,即使系统的所有内容,除了密钥,都是公共知识。
克劳德·香农后来用更通用的术语重新表述了这一点,作为香农的格言:
敌人知道系统。
关键是安全应该来自可靠的安全概念,而不是试图隐藏信息和算法。强大的加密操作确保了安全性,而私有代码只确保了默默无闻。
我最近听说大部分 PHP 代码都是机密的,因为如果攻击者知道您的数据库结构或用于加密密码的哈希函数,那么泄露的可能性就更高。
仅当设计人员不使用正确的哈希函数或保护 webapp 免受 SQL 注入时。但是这些东西很容易被检测到,现在有一些自动化工具可以通过源代码查找 SQL 注入漏洞(而不是指向sqlmap
webapp)
如果你使用 scrypt 之类的东西,你可以完全安全地告诉每个人你使用它。
MediaWiki 曾经使用加盐的 MD5 哈希。salt 是特定于安装的,而不是开源代码的一部分(它在安装时生成)。这并不安全(每个用户的盐和使用更好的散列算法会更好),但只要不暴露 LocalSettings 文件,它仍然是安全的。(诚然,这不是一个很好的安全级别)。我认为 Drupal 也这样做,但使用 sha512。
我想知道,如果是这样,那么开源项目的一切都是公开的呢?
默默无闻的安全不是安全。如果将代码公开会影响安全性,那么您首先就没有任何安全性。
此外,如果代码中存在安全漏洞,这些漏洞也会被贡献者捕获。例如,我最近在 Bugzilla 软件中发现并修补了一个与安全相关的错误。
最近听说大部分PHP代码都是保密的
这似乎是不正确的。至少,大多数 PHP 对任何分发它的人都是未混淆的和可读的。
因为如果攻击者知道您的数据库结构或用于加密密码的散列函数,则泄露的可能性更高。
也不正确。数据库结构和散列函数都不是构建初始漏洞的关键。这些可能在违规后有用,但在生成初始攻击时重要的是了解站点代码中的某些缺陷或漏洞。
拥有源代码有助于发现安全漏洞(参见:Wordpress 和 Joomla 插件),这并不是必需的。事实上,大多数有趣的漏洞(Windows、Flash、Internet Explorer、Acrobat 等)都是在不借助源代码的情况下发现的。
使您的项目开源可以使第三方更容易审核代码(无论是否经过您的许可),这应该会导致更早地发现错误和漏洞,并有望使它们更快、更容易修补。
假设您的项目足够受欢迎以得到合理数量的审查,这应该意味着一旦完成初始发现和审查期,您的项目就不太可能存在重要的安全漏洞。很难获得这方面的良好数据,但一些证据表明,流行的开源软件不太可能存在那些存在且活跃但几十年未公开的“休眠”漏洞。