1. SQL注入攻击的本质与危害
SQL注入(SQL Injection)是Web应用开发中最常见的安全漏洞之一。攻击者通过在用户输入中插入恶意SQL代码,欺骗后端数据库执行非预期的操作。根据OWASP Top 10榜单,注入漏洞常年位居Web安全风险首位。
典型的注入攻击场景包括:
- 通过登录表单注入
' OR '1'='1绕过身份验证 - 使用
UNION SELECT提取数据库敏感信息 - 执行
DROP TABLE等破坏性操作
去年某电商平台就因未过滤用户输入,导致攻击者通过商品搜索框注入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 = ''
--后的内容被注释,直接以admin身份登录。
2.2 不完全的参数化查询
错误示例:
python复制cursor.execute("SELECT * FROM logs WHERE time > %s" % user_input)
虽然使用了占位符,但通过字符串格式化提前拼接,依然存在注入风险。
2.3 动态表名/列名处理
python复制query = f"SELECT {columns} FROM {table} WHERE id = {id}"
Python 3.6+的f-string虽然方便,但直接用于SQL语句构造极其危险。
3. 防御SQL注入的核心方案
3.1 使用预编译语句(Prepared Statements)
所有主流数据库驱动都支持参数化查询:
python复制# 正确做法
cursor.e
