当前位置: 首页 > 文章 > Web安全 > 正文

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 只能降噪,不能替代修复。

附件资料

附件仅对登录用户可见,请先 登录。

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。