You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用mysqli模拟SQL注入攻击?提交注入语句后未删表报错

SQL注入失败的原因解析

先看你提供的代码:

if(isset($_POST['submit'])) {
    $name = $_POST['name'];

    $query = mysqli_query($conn, "select name from accounts where name = '{$name}'");
    if($query) {
       echo "success";
    } else {
        echo "error";
    }
}
?>

<form action="" method="post">
    Name: <input type="text" name="name"><br><br>
    <input type="submit" name="submit" value="Add">
</form>

你尝试注入却只返回error、目标表未被删除,核心原因有两点:

  1. mysqli_query默认禁用多语句执行
    mysqli_query函数不允许在一次调用中执行多个用分号分隔的SQL语句。你输入的类似xxx'; DROP TABLE 目标表;--的注入语句,会被整体当作name字段的查询值,无法触发后续的删除操作。

  2. 注入语句导致SQL语法错误
    拼接后的SQL会变成select name from accounts where name = 'xxx'; DROP TABLE 目标表;--',这里不仅多语句被拦截,还存在单引号不匹配的语法问题,直接导致查询执行失败,mysqli_query返回false,页面输出error。

如果要验证是否存在注入点,可以尝试单语句注入,比如输入' OR '1'='1,此时拼接后的SQL为select name from accounts where name = '' OR '1'='1',若查询能正常执行(无论是否返回数据),页面会输出success,这说明确实存在注入漏洞,但受限于mysqli_query的机制,无法执行多语句的删除操作。

内容的提问来源于stack exchange,提问作者Osama Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:05:31