php登录,即使输入大写密码,我也可以登录,反之亦然


php login, i can login even i enter uppercased password or vice versa

我的登录中有这个代码,然后我试图输入我的密码,例如我的真实密码是"Reymar25",但当我输入"Reymar25"时,它登录了,不应该在另一个页面中继续,请帮我复习一下。。谢谢

<?php
include('dbconnection.php');
if (isset($_POST['submit']))
{
    $username = $_POST['username'];$password = $_POST['password'];
    $query = mysql_query("SELECT * FROM tbl_user username = '".$username."' AND password = '".$password."' LIMIT 1");
    //("SELECT * FROM tbl_user WHERE username = '".$username."' AND password =       '".$password."' LIMIT 1"); 
    if (mysql_num_rows($query) == 1)
    {
        $row = mysql_fetch_array($query);
        header("Location: index1.php"); // Modify to go to the page you would like 
        exit; 
    }
    else
    { 
        header("Location: loginform.php"); 
        echo "Please Check Username or Password!";
        exit();
    }
}
?>

检查用户名和密码列的排序规则设置。看见http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

(请阅读您的问题评论,其中包含关于如何解决代码中的其他问题的重要信息)

关于问题:

为什么要重复SQL语句两次?然而,该查询是正确的。我认为您可能需要使列区分大小写。看看这个答案。


然而,您实现的机制非常薄弱:

  1. 可以使用SQL注入
  2. 您将密码存储为纯文本(如果有的话)破解你的服务器,他/她可以破解所有密码,你应该使用散列。例如,您可以使用用户名作为salt来生成哈希,然后检查该哈希是否存在于数据库中的某个位置
  3. 只有当用户输入正确的密码时,才能委派您的页面。为了确保网站的安全,您应该每次检查每个页面标题中的密码

我试过这段代码,它很有效。很抱歉,如果我没有使用PDO,

if (isset($_POST['submit']))
{
$username = $_POST['username'];
$password = $_POST['password'];

$query = mysql_query("SELECT * FROM tbl_user LIMIT 1");
while($row = mysql_fetch_array($query))
{
if(strcmp($username,$row['username'])==0 && strcmp($password,$row['password'])==0)
{
header("Location: index1.php");
}
else
{
echo "Somethings wrong either on your Username or Password Please Try Again" ;
}
}

}?>