1

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

但是,如果我输入用户名作为“管理员”和错误的密码,它仍然会接受它并将我重定向到成员页面。

请注意我刚刚开始使用 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.";
}
4

3 回答 3

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

改成

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

尽管从逻辑上讲,此错误不应让您使用 bum 密码进入,但它应该拒绝密码与用户名不同的任何尝试

于 2012-06-06T15:50:34.597 回答
0

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

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

另外,我在 IF ELSE 条件下进行了适当的比较来修复它,如

$stmt->num_rows != 0

谢谢大家 :)

于 2012-07-19T06:33:15.397 回答
0

看了一下,这个贴出来了

改变:

$stmt->num_rows > 0

至:

$stmt->num_rows == 1

首先,没有关于你的数据库是什么样子的描述,所以谁知道有多少结果。此外,如果每个用户有 1 次登录,则该结果应该只包含 1 行。

于 2012-06-06T15:56:36.043 回答