视频加载失败

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、() 括号包裹

防御方案#

  1. 参数化查询(首选):预编译语句将数据与 SQL 结构彻底分离,是根治方案。
  2. 输入校验:白名单校验类型、长度、字符集。
  3. 最小权限:数据库账号只给业务所需权限,禁用 FILE、MULTI 等高危权限。
  4. WAF 兜底:作为纵深防御的一层,但不能替代代码修复。

参数化查询不是”过滤”输入,而是从根本上让输入无法成为 SQL 结构的一部分——这是它与黑名单方案的本质区别。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
SQL 注入漏洞原理与防御
https://firefly.cuteleaf.cn/posts/sql-injection-basics/
作者
zz
发布于
2026-10-08
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
zz
Hello, I'm zz.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
17
分类
6
标签
31
总字数
18,302
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录