扫描所有sql表并将每一行与用户输入进行比较是否比选择具有给定用户名的行花费的时间更长?

时间:2019-01-24 10:10:51

标签: php mysqli

这是我在Stackoverflow中的第一个问题,对不起,如果事情不太对劲。

我几天前开始学习后端开发。
目前,我正在开发具有登录功能的应用程序。

根据到目前为止的经验,我应该输入用户名和密码,然后检查数据库中是否存在匹配项,如果有匹配项,我将将该人登录。

但是,为了保护我的Web应用程序免遭潜在的SQL注入,我在构建查询时需要使用准备好的语句或至少使用转义字符串。

如果获得用户输入,则使用for循环获取每个用户的用户名和密码,并将其与尝试登录的用户输入进行比较。
这似乎解决了SQL注入的危险,因为什么也没有发送到服务器,仅与服务器内部的数据相比。

这种方法会慢很多还是会打开其他漏洞?

应该使用哪种方法更好,更安全?


这是我正在使用的PHP代码:

$r = "SELECT * FROM users";
$result = mysqli_query($con, $r);
$rows = mysqli_num_rows($result);
for ($i = 1; $i <= $rows; $i++){
    $checkQ = "SELECT * FROM users WHERE id = $i";
    $r = mysqli_query($con, $checkQ);
    $result = mysqli_fetch_assoc($r);

    if ((isset($_POST["username"])) && (isset($_POST["password"]))) {
        if (
            ($result["username"] == $_POST["username"])
            && ($result["password"]==$_POST["password"])
        ) {
            $_SESSION["username"] = $_POST["username"];
            mysqli_close($con);
            header("Location: home.php");
        }
    }
}

0 个答案:

没有答案