这是我在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");
}
}
}