A05:2025 - 注入攻击
💡 学习提示: 本文档介绍 OWASP Top 10 A05 - 注入攻击,这是最经典也是最危险的 Web 安全风险之一。
📋 风险概述
注入攻击 (Injection) 是指攻击者将恶意代码注入到解释器执行,从而窃取数据、控制系统或破坏应用。常见类型包括 SQL 注入、命令注入、XSS 等。
🟠 危害等级:高危
| 项目 |
说明 |
| 发生率 |
2.38% |
| 平均影响 |
7.56/10 |
🎯 常见类型
1. SQL 注入
-- ❌ 错误:拼接用户输入
query = "SELECT * FROM users WHERE id = " + user_input
-- ✅ 正确:使用参数化查询
cursor.execute("SELECT * FROM users WHERE id = ?", (user_input,))
2. 命令注入
# ❌ 错误:直接执行用户输入
os.system("ping " + user_input)
# ✅ 正确:使用 subprocess 并禁用 shell
subprocess.run(["ping", user_input], shell=False)
3. XSS 跨站脚本
// ❌ 错误:直接渲染用户输入
element.innerHTML = userInput;
// ✅ 正确:使用 textContent
element.textContent = userInput;
🛡️ 防御方法
✅ 1. 输入验证
# 验证输入格式
import re
if not re.match(r'^[a-zA-Z0-9]+$', user_input):
raise ValueError("Invalid input")
✅ 2. 参数化查询
# ✅ 使用 ORM 或参数化查询
User.objects.filter(id=user_id) # Django ORM
✅ 3. 输出编码
# ✅ HTML 编码
import html
safe_output = html.escape(user_input)
🔗 参考资料
最后更新:2026-03-10