---
topic: owasp_auth
title: OWASP - 破损的认证防护
when_to_use: 实现用户认证和会话管理时
keywords:
- OWASP
- 认证
- 会话管理
- 安全
---
# OWASP #2: 破损的认证
## 密码存储
### ❌ 纯文本密码
```python
def create_user(username, password):
user = User(username=username, password=password)
db.save(user)
```
### ✅ 密码哈希 - Werkzeug
```python
from werkzeug.security import generate_password_hash, check_password_hash
def create_user(username, password):
hashed = generate_password_hash(password)
user = User(username=username, password_hash=hashed)
db.save(user)
def verify_password(user, password):
return check_password_hash(user.password_hash, password)
```
### ✅ 使用 bcrypt
```python
import bcrypt
def hash_password(password: str) -> bytes:
return bcrypt.hashpw(password.encode(), bcrypt.gensalt())
def verify_password(password: str, hashed: bytes) -> bool:
return bcrypt.checkpw(password.encode(), hashed)
```
## 最佳实践
- 永远不要存储明文密码
- 使用强哈希算法(bcrypt, Argon2)
- 实施多因素认证
- 设置密码强度要求
- 实施账户锁定机制
## 相关链接
- [OWASP 认证备忘单](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html)
- [bcrypt 文档](https://pypi.org/project/bcrypt/)