SQL 注入:原理、入侵过程与防御对照
admin
2026-10-26 16:21
32人看过
免费
## 原理
应用程序把**不可信输入**直接拼进 SQL 语句,使输入被数据库解析为语法而非数据。攻击者可改变查询逻辑,读写甚至执行高危操作(取决于账号权限与数据库能力)。
典型错误形态:
```sql
-- 伪代码:WHERE name = '" + user_input + "'"
SELECT * FROM users WHERE name = 'admin' OR '1'='1' --'
```
根因不是「没过滤单引号」,而是**没有把数据与代码分离**(未参数化 / 未使用预编译)。
## 典型入侵过程(教学向)
1. **发现注入点**:登录框、搜索、排序字段、Cookie、HTTP 头等进入 SQL 的位置。
2. **判断类型**:报错注入、布尔盲注、时间盲注、联合查询等。
3. **确认库结构**:库名 → 表名 → 列名(在授权靶场练习)。
4. **目标数据**:账户哈希、业务敏感表;或尝试写文件/出网(高权限场景)。
5. **扩大影响**:利用数据库账号权限读写其他库、落地 WebShell(若 `INTO OUTFILE` 等可用)。
> 未授权对真实系统进行上述操作违法。下文默认授权靶场 / 攻防演练。
## 防御对照
| 环节 | 错误做法 | 正确做法 |
|------|----------|----------|
| 查询构造 | 字符串拼接 | 预编译 / ORM 参数绑定 |
| 标识符 | 用户输入作文表名/排序列 | 白名单映射 |
| 账号 | 应用用 root/sa | 最小权限、禁危险过程 |
| 输入 | 只靠黑名单过滤 | 类型约束 + 参数化双保险 |
| 监测 | 无 SQL 审计 | 慢查询/异常语句告警 |
## 开发自检
- 全局搜索 `raw(`、`execute(`、字符串拼 SQL。
- 动态 `ORDER BY` / `LIMIT` 是否白名单。
- WAF 只能降噪,不能替代修复。
版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。