防止SQL注入攻击:使用预处理语句
为了防止SQL注入攻击,可以使用参数化查询或预编译语句来处理用户输入的数据。在这种情况下,可以使用mysqli的预处理语句来防止SQL注入。
修改代码如下:
<?php
include 'sql.php';
$old_user_id = $_COOKIE['user_id'];
$old_user_password = $_COOKIE['user_password'];
if (isset($old_user_id) && isset($old_user_password)) {
$query = 'SELECT * FROM user WHERE user_id = ? AND user_password = ?';
$stmt = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($stmt, 'ss', $old_user_id, $old_user_password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if (mysqli_num_rows($result) > 0) {
header('Location: /');
exit();
}
}
$user_login = $_POST['user_login'];
$user_password = md5($_POST['user_password']);
if (isset($user_login) && isset($user_password)) {
$query = 'SELECT * FROM user WHERE user_login = ? AND user_password = ?';
$stmt = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($stmt, 'ss', $user_login, $user_password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$user_name = $row['user_name'];
$user_id = $row['user_id'];
setcookie('user_id', $user_id, time() + (30 * 24 * 60 * 60));
setcookie('user_password', $user_password, time() + (30 * 24 * 60 * 60));
header('Location: /');
exit();
} else {
echo '密码错误';
}
} else {
}
?>
在预处理语句中,将用户输入的值以参数的形式传递给查询语句,从而避免将用户输入直接插入到SQL查询中。这样可以防止恶意用户通过输入特殊字符来破坏查询语句的结构,从而防止SQL注入攻击。
原文地址: https://www.cveoy.top/t/topic/bPwW 著作权归作者所有。请勿转载和采集!