1. SQL注入攻击的本质与危害
SQL注入(SQL Injection)是Web应用中最常见的安全漏洞之一。攻击者通过在用户输入中插入恶意SQL代码,欺骗后端数据库执行非预期的操作。根据OWASP Top 10最新报告,注入类漏洞长期位居Web安全风险榜首。
典型的攻击场景包括:
- 通过表单输入
' OR '1'='1绕过登录验证 - 使用
; DROP TABLE users--删除数据表 - 利用
UNION SELECT窃取敏感数据
去年某电商平台就因未防护SQL注入,导致百万用户数据泄露。攻击者仅用简单的注入语句就获取了整个用户表的明文密码。这类事故不仅造成直接经济损失,更会严重损害企业声誉。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Python中SQL注入的常见入口点
2.1 字符串拼接式查询
这是最危险的写法:
python复制query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"
cursor.execute(query)
当输入admin'--时,实际执行的SQL变为:
sql复制SELECT * FROM users WHERE username = 'admin'--' AND password = ''
--后的内容被注释,直接以管理员身份登录。
2.2 不完全的参数化查询
错误示例:
python复制cursor.execute("SELECT * FROM products WHERE category = %s" % category)
虽然使用了占位符,但通过字符串格式化而非真正的参数化传递。
2.3 动态表名/列名处理
python复制query = f"SELECT {columns} FROM {table} WHERE id = {id}"
Python 3.6+的f-string虽然方便,但直接用于SQL语句构造极其危险。
3. 防御SQL注入的核心方案
3.1 使用DB-API的参数化查询
所有主流Python数据库驱动都支持参数化查询:
python复制# 正确做法
cursor
