SQL注入入门笔记
First Post:
Last Update:
Last Update:
什么是 SQL 注入
SQL 注入(SQL Injection)是一种代码注入技术,攻击者通过在应用程序的输入字段中插入恶意的 SQL 语句,从而操纵后端数据库执行非预期的操作。
原理简介
当 Web 应用程序将用户输入直接拼接到 SQL 查询语句中,而没有进行适当的过滤或参数化处理时,就可能产生 SQL 注入漏洞。
漏洞代码示例
1 | |
攻击示例
假设正常查询为:
1 | |
攻击者输入 1 OR 1=1,查询变成:
1 | |
由于 1=1 永远为真,这条语句会返回 users 表中的所有数据。
SQL 注入分类
| 类型 | 说明 |
|---|---|
| 数字型注入 | 参数未用引号包裹,如 id=1 |
| 字符型注入 | 参数用引号包裹,如 name='admin' |
| 联合查询注入 | 使用 UNION SELECT 获取其他表数据 |
| 报错注入 | 利用数据库报错信息获取数据 |
| 布尔盲注 | 根据页面返回的 True/False 状态判断 |
| 时间盲注 | 利用 SLEEP() 等函数的时间延迟判断 |
防御方法
1. 使用参数化查询(推荐)
1 | |
2. 输入验证与过滤
- 对用户输入进行严格的类型检查
- 使用白名单验证
- 转义特殊字符
3. 最小权限原则
- 数据库账户只授予必要的权限
- 避免使用
root或sa等高权限账户连接数据库
推荐学习资源
- OWASP SQL Injection
- PortSwigger Web Security Academy - SQL Injection Labs
- DVWA / sqli-labs 靶场练习
免责声明:本文仅用于学习交流,请勿将文中技术用于非法用途。