10天零基础逆袭!Python入门到精通全攻略(附代码+实战)
第八篇:数据库操作与ORM(Day8)
一、SQL注入攻防实战
1.1 SQL注入原理
SQL注入是通过恶意构造输入,使得应用程序拼接的SQL语句被篡改,从而执行非预期的数据库操作[[3]]。例如:
-- 原始SQL
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
-- 恶意输入
username = "admin' -- "
password = "任意值"
-- 最终SQL
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '任意值';
危害分析:
- 数据泄露
- 数据篡改
- 系统权限提升
1.2 防御策略
-
参数化查询:避免直接拼接SQL语句[[10]]。
import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() # 安全查询 username = "admin" password = "12345" cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password)) result = cursor.fetchall()
-
ORM框架:使用对象关系映射工具自动处理SQL生成[[7]]。
-
输入验证:对用户输入进行严格校验和过滤。
import re def validate_input(input_str): if not re.match(r'^[a-zA-Z0-9_]+$', input_str): raise ValueError("非法字符")