我认为如果你能找出答案,“我的源代码被攻击者读取的可能性明显低于数据库吗?”,我认为这个问题已经为你解答了。
我建议不是 - 也许您的源不太可能泄漏,这取决于备份的方式等。即使如此,我怀疑泄漏的可能性要小得多,以至于您可以忽略风险,因为您这样做了不要忽视数据库的相同风险。数据库中的密码应该被加盐/散列的原因并不是因为数据库的某些特殊属性意味着攻击者可以查看其内容[*],而是攻击者可以以一种或另一种方式查看各种事物。
事实上,源代码甚至可能比数据库更容易泄漏,因为在系统上工作的任何人都可能需要访问源代码,而不是每个在系统上工作的人都必须访问实时数据库的内容。并不是说我认为您的开发人员不诚实(如果他们是,您遇到的问题比密码泄露更严重),只是围绕共享源的后勤工作可能会引入更多(或只是不同)可能意外泄漏的方式,而不是围绕备份的后勤工作数据库。
就个人而言,在您的情况下,我会在服务器上创建一个小文件,其中包含散列/加盐密码,几乎没有其他内容。安装应用程序不同实例的用户可以生成他们自己版本的此文件,其中包含他们自己的密码,与实际应用程序代码分开。他们应该使用与源代码相同的写访问限制来锁定它。
无论您将此文件称为“只读数据库”还是“服务器代码的一部分”,都不会影响攻击者查看它的难易程度,尽管它可能会影响您是否将密码称为“硬编码” ”。
[*] 当然,对于特定的数据库、SQL 注入攻击或其他什么,存在一些特殊的潜在缺陷。这些并不是数据库中的密码应该加盐和散列的决定性原因。