有StackOverflow上有关简单,数据库登录更少系统的许多问题。 我正要建议在盐渍哈希方法最近的一个 ,当时我想:“它是真正意义做到这一点?”。
我一直存储在数据库盐腌哈希多年,我明白为什么它更安全:如果数据库被破坏,它所包含的信息将不会允许任何人登录到我的系统(不同于如果我存储明文密码D b)。
但是,在不涉及数据库的建立,确实哈希+盐析提供任何保障福利? 我能想到的是,如果攻击者获得只读到我的服务器端代码访问的唯一原因,它不会有可能找出任何密码。 这是一个可能的场景? 因为一旦攻击者获得写访问的文件,他可以做任何事情。
所以我的问题是:设置非常简单,数据库登录较少系统时,应密码盐腌/散列,或者只是存储为纯文本?
我认为这个问题是回答你,如果你能找出答案,“是我的源代码显著不太可能被攻击者读取,比是数据库?”。
我建议,这不是 - 也许你的来源是有点不太可能泄露,这取决于事情如何备份等等。甚至让我怀疑,它是如此不太可能泄漏,你可以忽略的风险,因为你做的不能忽视对数据库相同的风险。 在数据库中的密码必须腌制的理由/散列是不是有这意味着攻击者可以查看其内容[*],它是攻击者可以得到一看各种各样的东西,这样或那样的数据库的一些特殊属性。
事实上源代码,甚至更可能不是数据库泄露,因为任何人在系统上的工作可能需要访问源,而不是每个人都在系统上工作不一定需要访问现场DB的内容。 这并不是说我认为你的开发人员是不诚实的(如果是这样,你比密码泄露问题更糟),只是周围的共享源物流可能会引入更多的(或只是不同的)方面,它可能会意外泄露,比物流周围备份一个DB。
就个人而言,在你情我愿创建一个包含散列/盐渍密码,大约没有别的服务器上的一个小文件。 安装应用程序的不同实例用户可以自己生成此文件的版本,包含自己的密码,从实际的应用程序代码分开。 因为他们做的源代码,他们应该用相同的写访问限制锁定下来。
无论你把这个文件“只读数据库”或“服务器代码的一部分”并不影响它是多么容易为攻击者观看的,尽管它可能会影响你是否指的是密码为“硬编码”。
当然[*]还有一些特殊特定的数据库,SQL注入式攻击或任何潜在的缺陷。 这些都不是决定性的原因,在数据库中的密码必须咸鱼和散列。
是的,它仍然提供了哈希和盐他们的利益。 如果脚本的源代码被泄露人本来简单地使用硬编码密码或谷歌的哈希和可能发现的输入值。 用盐腌哈希既不是可能的。
好吧,史蒂夫·杰索普已经概述。 源代码泄漏或更可能在一些拿到手。 如果你硬编码密码(我understnand),那么为什么不将其存储为两个部分一个数据结构=>使用的盐和散列密码。 你知道它,但它从来没有出现在源代码。 这也是人们与数据库连接字符串或类似的事情。 用钥匙躺在它下面的变量加密。 因此,它永远不会出现在正确的源代码。 也许甚至在内存转储,除非刚刚迈过。