为了防止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注入攻击。

防止SQL注入攻击:使用预处理语句

原文地址: https://www.cveoy.top/t/topic/bPwW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录