如何使用区分大小写的MySQL密码字段?

时间:2011-12-12 11:29:14

标签: php mysql passwords

我有用户登录但用户可以使用不区分大小写的方式登录意味着如果您的密码是'test',那么用户可以使用'TEST'密码登录。
我想避免在我的密码字段上进行此类型身份验证。

2 个答案:

答案 0 :(得分:14)

最简单的方法是在查询中使用binary关键字:

SELECT /*fields*/ FROM table WHERE /* where clause */ BINARY password = "userpassword"

OR

在PHP代码中使用strcmp

如果您存储我推荐的散列或加密密码,也可以使用此功能。

答案 1 :(得分:5)

我猜你是在清楚地存储密码。这不仅非常不安全,在大多数情况下也是不必要的。我的建议是将密码存储在两列中,例如:

password_salt VARCHAR(16)
password_hash VARCHAR(40)

在存储新密码之前,请获取用户提供的密码($clear_password),创建随机字符串($salt)并使用它们创建哈希值(sha1sum($salt . $clear_password)。存储salt和hash,并丢弃清除密码。

要验证密码,请检索给定用户的存储盐,生成哈希并查看它是否与数据库中的哈希匹配。

此技术称为salted passwords