# 安全与可靠性检查项

## 输入输出安全

- **Injection**：用户输入通过字符串拼接直接进入 SQL、NoSQL query、shell 命令或模板引擎，没有使用 parameterized query 或安全 API
- **XSS**：未经 escape 的用户数据直接输出到 HTML，或通过 `innerHTML`/`dangerouslySetInnerHTML` 插入页面
- **SSRF**：用户可控的 URL 被服务端直接发起请求，没有校验目标地址是否合法
- **Path traversal**：用户输入拼接到文件路径，没有 canonicalize 和白名单校验
- **ReDoS**：用户输入进入带有回溯风险的正则表达式，可能导致 CPU 占用飙升

## 认证与授权

- 新增的 API endpoint 或 route 没有经过认证中间件
- 操作资源前没有校验资源归属当前用户（水平越权）
- 接口直接信任客户端传来的 user_id、role、tenant_id 等身份字段，没有服务端验证
- 存在 tenant 隔离缺失：A 租户的请求能查到 B 租户的数据

## Credentials 与敏感数据

- token、API key、密码、private key 硬编码在代码或配置文件中
- log 中输出了完整请求/响应体，包含 credentials 或 PII
- 敏感字段没有在序列化或日志输出时被 mask 或过滤

## 运行时可靠性

- 外部服务调用没有 timeout，可能导致请求一直挂起
- 没有 retry 限制或 circuit breaker，外部故障会造成雪崩
- 无界循环或递归，可能导致 CPU 耗尽或 stack overflow
- 在请求主路径上执行阻塞 I/O（如同步读大文件），影响并发处理能力
- 大批量数据一次性加载进内存，存在 OOM 风险

## Race condition 与数据一致性

- **check-then-act**：先判断条件再执行操作，中间没有加锁或原子操作保护，存在 TOCTOU 问题
- 共享可变状态在多线程/多协程场景下没有同步控制
- **read-modify-write**：先读取再修改再写回，没有事务或乐观锁保护，并发时会有数据覆盖
- 重试机制可能导致操作重复执行，没有 idempotency 保证

## 加密与序列化

- 安全场景使用弱算法（MD5/SHA1 做密码 hash，ECB 模式加密）
- IV 或 salt 硬编码或重复使用，破坏加密随机性
- 直接 deserialize 不可信来源的数据（pickle、Java serialization、YAML.load），存在 RCE 风险
- 加密数据没有 MAC/HMAC 做完整性校验，可能被篡改

## 排查思路

审查时依次问自己：

- 这条数据从入口到落库或输出，中间有没有绕过校验、鉴权或过滤的路径？
- 这次改动是否新开了 API 入口、新增了信任边界，或扩大了已有权限范围？
- 如果输入异常、权限失效或外部系统不可用，系统会安全失败，还是会直接暴露风险？
- 如果没有明确代码路径支撑，停止延伸，不作为正式问题输出。
