SQL注入漏洞原理与防御
什么是SQL注入
SQL注入是一种代码注入技术,攻击者通过在应用程序的输入字段中插入恶意SQL代码,从而操纵后端数据库查询。
常见攻击方式
1. 基于错误的注入
' OR '1'='1
2. 联合查询注入
' UNION SELECT username, password FROM users--
3. 盲注
' AND (SELECT COUNT(*) FROM users) > 0--
防御方法
1. 使用参数化查询
# 安全的做法
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))
2. 输入验证
import re
def validate_input(input_str):
# 只允许字母数字
return re.match(r'^[a-zA-Z0-9]+$', input_str) is not None
3. 使用ORM框架
from sqlalchemy import create_engine
engine = create_engine('sqlite:///test.db')
# ORM会自动处理参数转义
users = session.query(User).filter(User.username == username).all()
总结
SQL注入是最常见的Web安全漏洞之一,通过使用参数化查询和输入验证可以有效防御。