在 php 中使用错误的密码登录成功


Login successfull with wrong password in php

我正在创建一个登录页面。下面的代码是用户填写用户名和密码输入字段时。

但是,如果我输入用户名为"admin"并输入错误的密码,它仍然接受它并将我重定向到会员页面。

请注意,我刚刚开始进入PHP。

$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);
if ($stmt = $mysqli->prepare("SELECT * FROM members WHERE username=? AND password=?"))
{
    $stmt->bind_param("ss", $input['user'], md5($input['pass'] . $config['salt']));
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows > 0)
    {
        //successful login/set session
        $_SESSION['username'] = $input['user'];
        header("Location: members.php");
    }
    else
    {
        $error['alert'] = "Error: Username/password incorrect!";
        include('views/v_login.php');
    }
}
else
{
    echo "Error: Could not prepare MySqli result.";
}
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);

更改为

$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);

虽然,从逻辑上讲,此错误不应该让你使用bum密码,但它应该拒绝任何密码与用户名不同的尝试。

看看它,这个突出了

改变:

$stmt->num_rows > 0

自:

$stmt->num_rows == 1

首先,没有关于数据库外观的描述,所以谁知道有多少结果。此外,如果每个用户有 1 个登录名,则该结果应仅包含 1 行。

只是为了更新。这现在已经修复了,这是我愚蠢的误会用户名和密码在顶部

$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);

此外,我在 IF ELSE 条件下通过适当的比较修复了它,因为

$stmt->num_rows != 0

感谢大家:)