---
topic: owasp_injection
title: OWASP - 注入攻击防护
when_to_use: 处理用户输入和数据库查询时
keywords:
- OWASP
- 注入攻击
- SQL注入
- 安全
---
# OWASP #1: 注入攻击
## SQL 注入防护
### ❌ SQL 注入风险
```python
def get_user(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
return db.execute(query)
```
### ✅ 使用参数化查询
```python
def get_user(user_id):
query = "SELECT * FROM users WHERE id = ?"
return db.execute(query, (user_id,))
```
### ✅ 使用 ORM
```python
from sqlalchemy import select
def get_user(user_id):
stmt = select(User).where(User.id == user_id)
return db.execute(stmt).scalar_one()
```
## 最佳实践
- 永远不要直接拼接用户输入到 SQL 查询
- 使用参数化查询或预编译语句
- 使用 ORM(如 SQLAlchemy)
- 对用户输入进行验证和清理
## 相关链接
- [OWASP SQL 注入](https://owasp.org/www-community/attacks/SQL_Injection)
- [SQLAlchemy 安全文档](https://docs.sqlalchemy.org/en/latest/core/tutorial.html#using-textual-sql)