以下是你提供的PHP代码。我已经注释了其中的一些代码行并提供了一些建议。

<?php
$link = mysqli_connect("localhost", "root", "root", "data breach");
if (!$link) {
    die("连接失败: " . mysqli_connect_error());
}

if (isset($_POST['input1'])) {
    $value1 = mysqli_real_escape_string($link, $_POST['input1']);
    $value2 = mysqli_real_escape_string($link, $_POST['input2']);
    $value3 = mysqli_real_escape_string($link, $_POST['input3']);
    $value4 = mysqli_real_escape_string($link, $_POST['input4']);
    //确保所有POST值都被转义以避免SQL注入攻击
}

mysqli_autocommit($link, FALSE); //关闭自动提交功能

$insert_query = "INSERT INTO amount_of_data_leaked VALUES ('$value1'),('$value2'),('$value3'),('$value4')";
$result = mysqli_query($link, $insert_query);

$query ="select * from amount_of_data_leaked order by S_num desc limit 5" //缺少分号


if ($result && mysqli_affected_rows($link) == 1) {
    mysqli_commit($link); //提交事务
    mysqli_close($link);
    echo "<script>window.location.href = '../index.php';</script>"; //将页面重定向到另一个页面
} else {
    echo mysqli_affected_rows($link);    
    echo $result; //这里应该输出错误消息,而不是结果对象
    mysqli_rollback($link); //回滚事务
    mysqli_close($link);
    echo 'false';
    echo gettype($value); //未定义$value变量
    echo  $value; //同上
}
?>

建议:

1.在代码的顶部定义所有变量,包括$value1,$value2等等。

2.确保所有POST值都被转义以避免SQL注入攻击。

3.在执行任何数据库操作之前关闭自动提交功能。

4.在执行完所有数据库操作后,如果所有操作都成功,则提交事务,否则回滚事务。

5.在执行INSERT语句时,应该使用一条语句而不是多条语句,例如:

$insert_query = "INSERT INTO amount_of_data_leaked (column1, column2, column3, column4) VALUES ('$value1', '$value2', '$value3', '$value4')";

6.在遇到数据库操作失败时,输出错误消息而不是结果对象。

7.使用prepared statements来执行数据库操作,而不是直接构建SQL查询。这可以防止SQL注入攻击。

PHP数据泄露量插入数据库代码分析及优化

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

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