【发布时间】:2015-01-19 10:34:32
【问题描述】:
在我的网络应用程序中,我正在实施用户无法选择的密码黑名单。正如 Jeff 的 God Login 帖子中提到的,这是因为一些密码非常常用,并且存在于暴力破解工具使用的 readily available wordlists 中。
我曾计划将列入黑名单的密码存储在数据库表中(明文),并带有MD5 hash of it as a Functional Index。因此,当查询发送到服务器时,它看起来像这样:
SELECT 1
FROM blacklist AS a
WHERE MD5(a.password) = 'MD5stringOfPasswordSubmitted';
我不认为这些密码的“明文”存储是个问题,因为这些密码被列入黑名单。没有用户可以将其设置为其中之一。所以谁在乎此表中的密码是否以明文形式存储。
但是,这个查询到数据库服务器的传输是我应该担心的问题吗?
如果我的用户正在尝试设置他们的密码,此时应用程序将对密码进行 MD5 处理,将其发送到数据库以查询此黑名单表。如果没有返回结果,应用程序将允许他们将其作为密码(只要还满足其他验证要求)。
这是我应该担心的事情吗?
这是否可以通过另一种方式实现,以便用户尝试设置的密码仍然保持安全?是否真的有必要通过 Bcrypt 存储盐渍哈希(就像在我的用户表中一样),即使只是为了这个黑名单使用?在我的应用程序的本地目录结构中使用 YAML 文件是否会有同样的风险?
其目的是防止用户选择常见的密码,并在验证过程中以非常快速的方式(因此是 MD5)对其进行检查。
【问题讨论】:
-
需要更多帮助吗?如果是这样,我会更新我的答案。
标签: security hash passwords password-hash