我最近在我的网站上有很多建议,其中一个是允许他们用小写的用户名登录。
如果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!
}
我该怎么做?
答案 0 :(得分:4)
确保格式化用户名以消除SQL注入攻击
用户名的Md5哈希是无意义的,因为大写和小写都很重要。您应该对密码进行哈希处理,而不是以纯文本格式存储
但是,基于您当前的数据库模型
$get_user_info = mysql_query(
"SELECT * FROM users WHERE username = '$entered_username' LIMIT 1")
现在比较密码。您不能使用Md5的用户名
答案 1 :(得分:2)
除了我同意的所有关于安全性的评论(特别是密码哈希......),要使用户名不区分大小写:
$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
子句,也可以删除密码检查并在php中执行此操作,以便您更好地处理登录错误(将不存在的用户名与错误的密码分开)。