2.2 KiB
2.2 KiB
name: defense-in-depth
description: Defense in depth: add layered validation/guardrails across a data path (auth, validation, invariants, logging, tests). Triggers: defense in depth, harden, guardrails, validate, 安全加固, 分层校验, 防御, 兜底.
Defense in Depth(分层校验 / 多道防线)
When to Use
- 用户输入/外部数据进入关键路径(权限、资金、数据破坏、执行命令、生成 SQL)
- 需要让 bug “结构性不可能发生”,而不是靠单点 if 修补
Inputs(required)
- Data path:输入从哪里来,最终影响什么(读写/执行/外部调用)
- Trust boundary:哪些边界跨越了(用户/服务/网络/磁盘/数据库)
- Threat model(简版):最担心的 1–3 类失败(越权/注入/数据损坏/DoS)
- Constraints:性能/兼容性/日志合规/可观测性要求
Procedure(layer by layer)
-
Map the Path
- 画出路径:入口 → 解析/校验 → 业务决策 → 持久化/外部调用 → 输出
- 标注每层的“必须成立的不变量”(invariants)
-
Add Guards at Multiple Layers
- Input layer:schema/type/length/range/encoding 校验,拒绝非法输入
- Auth layer:身份认证、权限校验、租户隔离、最小权限
- Business layer:状态机/幂等/一致性约束、边界条件保护
- Persistence layer:事务、约束、唯一索引、外键/检查约束(可用时)
- Output layer:错误信息最小化、敏感字段脱敏、避免回显注入
-
Observability
- 在关键断点加日志/metrics/trace(但不记录 secrets)
- 失败要“可定位”:错误码/上下文 key/相关 ID
-
Tests
- 每层至少一个代表性测试:合法/非法/越权/边界条件
- 高风险路径补集成测试或 e2e 验证
Output Contract(stable)
- Data path:关键路径与边界(简图/文字)
- Risks:主要风险与触发条件
- Layers:每层做了什么防线(列表化)
- Tests:新增/更新的验证点
- Residual risk:还剩哪些风险(以及为什么接受)
Guardrails
- 防线要“可证明有效”:不写空泛口号
- 任何会影响行为/接口的防线都必须评估兼容性与回滚策略