密码不检查区分大小写

时间:2012-04-10 07:55:05

标签: php mysql

我在我创建的网站上有一个登录表单。我使用PHP验证密码,密码存储在MYSQL数据库中。我遇到的问题是密码不区分大小写。它接受没有字符考虑到这种情况。我正在使用Kubuntu linux OS

有没有人可以帮忙解决这个问题?。我应该在mysql / my.cnf中为COLLATION使用什么值来避免这种情况?或者还有其他解决办法吗?

非常感谢任何帮助。

感谢。

6 个答案:

答案 0 :(得分:10)

您的MySQL 排序规则可能不区分大小写。将存储密码的列更改为区分大小写的排序规则。

一些经验法则:

  • 当整理在_ci中结束时,它不区分大小写。
  • 当整理在_cs中结束时,它区分大小写。

示例:

  • utf8_general_ci不区分大小写。
  • utf8_bin区分大小写

然而,一个重要的注意事项

如果您遇到此问题,则可能存储密码错误。您不应该以纯文本格式存储密码,但是您应该存储密码的哈希值,并正确加密。

然后,当用户登录时,您对其条目进行哈希处理,并将哈希值与数据库保存的值进行比较。当两者相等时,用户可能输入了正确的密码。

答案 1 :(得分:1)

这意味着您将密码以明文形式存储,这通常不是一个好主意。无论如何,一个选项是检索密码并在PHP中而不是在WHERE子句中进行比较。

答案 2 :(得分:1)

解决问题的另一种方法是在将密码存储到数据库之前对密码进行哈希处理。这也会增加安全性,因为密码不会以未加密的方式存储在数据库中。

$hash_to_store_in_database = sha1($password);

您可以在网上搜索如何使用salt和所有其他安全信息来存储散列密码。

答案 3 :(得分:1)

虽然Konerak的答案是正确的,但我会采用不同的方式,而不是将密码存储为明文,但不是哈希,可能是md5sha1

答案 4 :(得分:1)

好像你在一般文字中存储密码。否则,utf8_general_ci之类的排序通常不应成为问题。

存储密码时,应使用md5()或sha1()散列密码。

答案 5 :(得分:0)

您可以在php中使用 strcmp 函数或使用类似

的内容
"SELECT [...] WHERE BINARY tablename.password = $form_password"