【问题标题】:what information should I hash before saving to database?在保存到数据库之前我应该​​散列哪些信息?
【发布时间】:2012-11-28 04:34:45
【问题描述】:

我知道在将其保存到数据库之前我应该​​ md5(password.salt)。但我有一些奇怪的问题: + 我是否也应该 md5 内容/文本字符串(使用密码作为盐)? 示例:如果数据库被泄露,攻击者无法读取已关闭论坛的内容 + 如果我不应该对内容进行 md5 处理,并将它们全部保存为纯文本,那么攻击者在手头有数据库时试图获取用户密码有什么意义?

【问题讨论】:

  • MD5 是一种hash 算法,而不是加密。如果您有一个只能由某些人阅读的“封闭论坛”,那么您可能需要考虑使用 gpg 之类的东西以及应该能够阅读内容的每个人的公钥来加密内容。然后他们可以用他们的私钥解密内容(当然他们不会发送给你)。除了最安全的应用程序之外,这对于所有应用程序来说都可能是多余的。
  • 你不应该使用 md5(password.salt)。您应该使用专用的密码散列算法,例如 bcrypt。 md5 已损坏,不应被视为安全。其他“普通”哈希值(例如 SHA1 或 SHA2)也不适合安全密码存储。

标签: passwords md5


【解决方案1】:

散列密码的目的是防止获得您数据库访问权限的第三方获知用户的密码是什么。如果您的数据库内容已经到了那么远,那么它们已经受到了损害,因此论坛内容已经暴露出来。您不希望人们的密码被泄露,因为许多人在多个网站上使用相同的密码。

如果您有一个安全的论坛,那么您需要防止攻击者访问数据库。如果他们进入,您的论坛帖子就会暴露。不要费心试图进一步保护他们。这个想法是,如果攻击者获得了对数据库的访问权限,那么您已经限制了损害的表面区域。您的站点数据被泄露,但希望不是用户的凭据。有些人会在您的网站上使用他们的银行用户名和密码,而这正是您要保护的。

请记住,散列函数是一种方法。您无法取消散列数据。这对密码来说很好:你不需要知道人们的密码是什么,你只需要能够比较它们。它不适用于论坛帖子。散列不是加密。加密的数据可以被解密。散列后的数据不能取消散列。

【讨论】:

  • @gaixixon - 真正考虑使用 BCrypt,tutorial 描述了为什么需要像 BCrypt 这样的慢速密钥派生函数。我你使用的是 PHP,你可以使用 PHP 的 5.5 实现,compatibility pack 可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多