SQL 注入漏洞原理与防御
450 字
2 分钟
SQL 注入漏洞原理与防御
什么是 SQL 注入
SQL 注入(SQL Injection)是一种将恶意 SQL 片段拼接到后端查询语句中、从而绕过认证或窃取数据的攻击方式。自 OWASP Top 10 诞生以来,它几乎从未跌出榜单,是 Web 安全领域最经典、也最危险的漏洞类型之一。
一个典型的漏洞代码长这样:
$id = $_GET['id'];$sql = "SELECT * FROM users WHERE id = " . $id;当攻击者传入 id=1 OR 1=1 时,查询变成 SELECT * FROM users WHERE id = 1 OR 1=1,整张表被悉数返回。
利用方式分类
- 联合查询注入(UNION-based):用
UNION SELECT拼接额外结果集,直接回显数据。 - 报错注入(Error-based):利用数据库报错信息回显,适合页面会打印 SQL 错误的场景。
- 布尔盲注(Boolean blind):页面无回显,但可通过
AND 1=1/AND 1=2的响应差异逐位猜解。 - 时间盲注(Time-based blind):连布尔差异都没有时,用
SLEEP()/BENCHMARK()根据响应耗时判断。
常见绕过技巧
- 关键字过滤:
UNION→UnIoN、/**/内联注释、%0a换行符 - 引号转义:宽字节注入(
%df'吃掉反斜杠)、十六进制绕过 - 空格过滤:
/**/、%09、()括号包裹
防御方案
- 参数化查询(首选):预编译语句将数据与 SQL 结构彻底分离,是根治方案。
- 输入校验:白名单校验类型、长度、字符集。
- 最小权限:数据库账号只给业务所需权限,禁用
FILE、MULTI等高危权限。 - WAF 兜底:作为纵深防御的一层,但不能替代代码修复。
参数化查询不是”过滤”输入,而是从根本上让输入无法成为 SQL 结构的一部分——这是它与黑名单方案的本质区别。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
CTF Web 方向入门指南
CTF面向新手的 CTF Web 方向入门路线,涵盖必学知识点、常用工具与刷题平台推荐。
2
我的第一篇博客
记录开启博客的初衷,以及未来想在这里分享的内容方向。
3
逆向工程基础:x86 汇编入门
逆向工程从寄存器、指令到调用约定,带你迈出逆向工程的第一步,附 IDA 与 Ghidra 实操指引。
4
Firefly 代码块示例
文章示例在Firefly中使用表达性代码的代码块在 Markdown 中的外观。
5
Firefly 布局系统详解
博客指南深入了解 Firefly 的布局系统,包括侧边栏布局(左侧/双侧)和文章列表布局(列表/网格),以及自适应网格列数。
随机文章随机推荐














