2011-12-12 96 views
8

我有用户登录,但用户可以以不区分大小写的方式登录意味着如果您的密码是'测试',那么用户可以用'TEST'密码登录。
我想在我的密码字段中避免这种类型的身份验证。如何使用区分大小写的MySQL密码字段?

回答

13

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

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

OR

使用strcmp在PHP代码:

你可以,如果你存储使用,这也散列或加密的密码,我推荐。

5

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

password_salt VARCHAR(16) 
password_hash VARCHAR(40) 

存储新密码之前,采取由用户($clear_password)提供的密码,创建一个随机字符串($salt),并同时使用,以创建哈希(sha1sum($salt . $clear_password)。存储salt和hash并丢弃清除密码。

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

该技术被称为salted passwords

+0

感谢您的快速响应,它的安全风险的好主意 – SKu

+1

@SKu请首先阅读 - http://codahale.com/how-to-safely-store-a-password/。使用sha1是不够的。 –

+0

有利于安全,但不必对问题做任何事情? – joel