---
title: "A05:2025 - 注入攻击"
weight: 5
date: "2026-03-10T11:26:47+08:00"
lastmod: "2026-03-10T11:26:47+08:00"
---

💡 **学习提示**: 本文档介绍 OWASP Top 10 A05 - 注入攻击，这是最经典也是最危险的 Web 安全风险之一。

---

## 📋 风险概述

**注入攻击 (Injection)** 是指攻击者将恶意代码注入到解释器执行，从而窃取数据、控制系统或破坏应用。常见类型包括 SQL 注入、命令注入、XSS 等。

### 🟠 危害等级：高危

| 项目 | 说明 |
|------|------|
| **发生率** | 2.38% |
| **平均影响** | 7.56/10 |

---

## 🎯 常见类型

### 1. SQL 注入

```sql
-- ❌ 错误：拼接用户输入
query = "SELECT * FROM users WHERE id = " + user_input

-- ✅ 正确：使用参数化查询
cursor.execute("SELECT * FROM users WHERE id = ?", (user_input,))
```

### 2. 命令注入

```python
# ❌ 错误：直接执行用户输入
os.system("ping " + user_input)

# ✅ 正确：使用 subprocess 并禁用 shell
subprocess.run(["ping", user_input], shell=False)
```

### 3. XSS 跨站脚本

```javascript
// ❌ 错误：直接渲染用户输入
element.innerHTML = userInput;

// ✅ 正确：使用 textContent
element.textContent = userInput;
```

---

## 🛡️ 防御方法

### ✅ 1. 输入验证

```python
# 验证输入格式
import re
if not re.match(r'^[a-zA-Z0-9]+$', user_input):
    raise ValueError("Invalid input")
```

### ✅ 2. 参数化查询

```python
# ✅ 使用 ORM 或参数化查询
User.objects.filter(id=user_id)  # Django ORM
```

### ✅ 3. 输出编码

```python
# ✅ HTML 编码
import html
safe_output = html.escape(user_input)
```

---

## 🔗 参考资料

- **OWASP Top 10:2025 A05**: https://owasp.org/Top10/A05_2025-Injection/

---

*最后更新：2026-03-10*
