繁体   English   中英

PHP / SQL登录表单有问题

[英]PHP/SQL login form having problems

我正在尝试使用以下表单登录,但是它总是跳转到无效的用户名。 我在这里想念什么吗?

数据库连接:

$link   =   mysqli_connect("localhost","X","X","X");

if($link == false) {
    die("Error" .mysqli_connect_error());
}

登录脚本:

<?php
if (!isset($_POST['submit'])) {
?>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    Username: <input type="text" name="username" /><br />
    Password: <input type="password" name="password" /><br />
    <input type="submit" name="submit" value="Login" />
</form>
<?php
} else {
    // Include database credentials
    include('../db_connect.php');
    $mysqli =   new mysqli($link);
    // check connection
    if ($mysqli->connect_errno) {
        echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
        exit();
    }

    $username   =   $_POST['username'];
    $password   =   $_POST['password'];

    $sql        =   "SELECT * from admin WHERE admin_email LIKE '{$username}' AND admin_password LIKE '{$password}' LIMIT 1";
    $result     =   $mysqli->query($sql);
    if (!$result->num_rows == 1) {
        echo "<p>Invalid username/password combination</p>";
    } else {
        echo "<p>Logged in successfully</p>";
        // do stuffs
    }
}
?>      

我不确定100%,但是我认为摆脱$username$password周围的{}应该可以解决此问题,是的,使用LIKE登录是不好的。 然后,我可以在用户名中键入%abijeet% ,在密码字段中键入 p%并登录,只要系统中有人叫abijeet且密码中带有字母p。

使用PDO

同样,过滤来自$ _POST的输入也是一个好主意。 通常,我会要求您放弃使用mysqli并研究PDO- http://php.net/manual/zh/book.pdo.php

正确使用带有参数的PDO可以保护您免受SQL Injection攻击。

散列密码

不要将密码存储在普通测试中,请在保存之前对其进行哈希处理。 在这里检查-http: //php.net/manual/zh/function.password-hash.php

更新 -

确定,因此指出{}可以。 在我看来,可疑的另一件事是条件检查。

我将其更改为-

// Check the condition checking below!
if ($result->num_rows !== 1) {
    echo "<p>Invalid username/password combination</p>";
} else {
    echo "<p>Logged in successfully</p>";
    // do stuffs
}

这可能是运算符优先级的问题,反而更令人困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM