使用用户名登录,但使用小写用户名登录


Login with username, but login with lowercase username

我最近在我的网站上收到了很多建议,其中之一就是允许他们用小写的用户名登录。

如果JoHNdoE在数据库中有这样的用户名,我敢肯定,如果他们试图登录并且必须记住他们把这些大写字母放在哪里,那将是非常烦人的。

所以我想让他们John Doe可以用这个用户名johndoe来登录。更容易记住。

我的查询是当前

$get_user_info = mysql_query("SELECT * FROM users WHERE username = '$entered_username' AND md5_username = '$md5_entered_username' AND password = '$entered_password' LIMIT 1");

然后继续写

if (mysql_num_rows($get_user_info)==1) {
//then log them in
} else {
//kick 'em out!
}

我该怎么做呢?

  1. 确保用户名的格式可以消除SQL注入攻击

  2. 用户名的Md5哈希值将没有意义,因为大写和小写很重要。你应该将密码散列而不是以明文形式存储

  3. 但是,基于您当前的DB模型

    $get_user_info = mysql_query(
        "SELECT * FROM users WHERE username = '$entered_username'  LIMIT 1")
    

    现在比较密码。你不能使用Md5的用户名

除了我同意的关于安全性的所有评论(特别是密码散列…),要使用户名不区分大小写:

$entered_username = strtolower($entered_username);
$get_user_info = mysql_query("SELECT * FROM `users` WHERE LOWER(`username`) = '$entered_username' AND `password` = '$entered_password' LIMIT 1");

如果你的用户名是唯一的(我假设他们是…),你可以删除LIMIT子句,你也可以删除密码检查,这样你就能更好地处理登录错误(分离不存在的用户名和错误的密码)。