---
name: secure-code
description: 安全编码检查 — OWASP Top 10 检查清单，写安全相关代码时必须遵循
origin: AI-Engineering
---

# 安全编码检查

## When to Activate

- 处理用户输入的代码
- 认证/授权相关代码
- 文件操作、数据库操作
- API 端点实现
- 第三方集成

## OWASP Top 10 对照表

### 1. 注入（SQL/命令/LDAP）

```python
# 禁止
query = f"SELECT * FROM users WHERE id = {user_input}"
os.system(f"ls {user_input}")

# 正确
cursor.execute("SELECT * FROM users WHERE id = %s", (user_input,))
subprocess.run(["ls", user_input], shell=False)
```

检查项：
- [ ] 所有数据库查询使用参数化
- [ ] 所有 shell 命令不拼接用户输入
- [ ] 不使用 `eval()`、`exec()` 处理用户输入

### 2. 身份认证失败

检查项：
- [ ] 密码使用 bcrypt/argon2 哈希（不用 MD5/SHA1）
- [ ] 登录失败不暴露 "用户不存在" vs "密码错误"（统一提示）
- [ ] Session Token 有过期时间
- [ ] 敏感操作需要重新认证

### 3. 敏感数据暴露

检查项：
- [ ] 日志中不记录密码、Token、PII
- [ ] 错误响应不暴露堆栈信息（生产环境）
- [ ] 传输使用 HTTPS
- [ ] 敏感字段加密存储

### 4. XML 外部实体（XXE）

检查项：
- [ ] XML 解析器禁用外部实体
- [ ] 优先使用 JSON 替代 XML

### 5. 访问控制破坏

检查项：
- [ ] 每个 API 端点都有权限检查
- [ ] 权限检查在服务端执行（不信任前端）
- [ ] 遵循最小权限原则
- [ ] 不使用可预测的资源 ID（用 UUID 替代自增 ID）

### 6. 安全配置错误

检查项：
- [ ] 默认密码已修改
- [ ] 调试模式在生产环境关闭
- [ ] 不必要的端口/服务已关闭
- [ ] HTTP 响应头包含安全头（CSP、X-Frame-Options 等）

### 7. 跨站脚本（XSS）

检查项：
- [ ] 用户输入在输出前转义
- [ ] 使用模板引擎的自动转义
- [ ] Content-Type 正确设置
- [ ] 不使用 `innerHTML` 渲染用户输入

### 8. 不安全的反序列化

检查项：
- [ ] 不反序列化不受信任的数据
- [ ] 使用白名单限制可反序列化的类型
- [ ] 对序列化数据做完整性校验

### 9. 已知漏洞组件

检查项：
- [ ] 依赖版本无已知 CVE
- [ ] 定期更新依赖（`npm audit`、`pip audit`）
- [ ] 不使用已废弃的库

### 10. 日志与监控不足

检查项：
- [ ] 认证失败有日志记录
- [ ] 权限变更有审计日志
- [ ] 敏感操作有日志（谁、什么时间、做了什么）
- [ ] 日志不含敏感信息

---

## 快速判断

| 代码类型 | 必须检查的项 |
|---|---|
| API 端点 | #1, #5, #7, #10 |
| 数据库操作 | #1, #3 |
| 认证系统 | #2, #3, #5, #10 |
| 文件处理 | #1, #4, #8 |
| 前端组件 | #7 |