---
appliesTo:
  - security
priority: 100
---

# 安全编码规范

## 输入验证

- **不信任任何输入**：所有用户输入必须校验（长度、类型、范围、格式）。
- **白名单校验**：优先使用允许列表（白名单），而非禁止列表（黑名单）。
- **参数化查询**：数据库查询必须使用参数化/预处理语句，禁止字符串拼接 SQL。

## 认证与授权

- **最小权限原则**：每个接口明确所需权限，默认拒绝。
- **敏感操作二次确认**：资金操作、数据删除等需要额外验证（如短信/密码）。
- **Token 安全**：JWT 设置合理过期时间（Access Token 15min，Refresh Token 7d），使用 HTTPS 传输。

## 数据保护

- **敏感数据加密**：密码使用 bcrypt/argon2，身份证号/银行卡号使用 AES-256 加密存储。
- **日志脱敏**：日志中不出现明文密码、Token、身份证号。
- **防泄漏**：错误响应不暴露堆栈、数据库结构、内部路径。

## 常见漏洞防护

- **XSS**：输出到 DOM 前转义，使用框架内置的 XSS 防护（React/Vue 自动转义）。
- **CSRF**：状态变更操作使用 CSRF Token 或 SameSite Cookie。
- **文件上传**：限制文件类型（白名单）、大小、存储路径（禁止执行权限）。
