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