--- 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) 1. **Map the Path** - 画出路径:入口 → 解析/校验 → 业务决策 → 持久化/外部调用 → 输出 - 标注每层的“必须成立的不变量”(invariants) 2. **Add Guards at Multiple Layers** - **Input layer**:schema/type/length/range/encoding 校验,拒绝非法输入 - **Auth layer**:身份认证、权限校验、租户隔离、最小权限 - **Business layer**:状态机/幂等/一致性约束、边界条件保护 - **Persistence layer**:事务、约束、唯一索引、外键/检查约束(可用时) - **Output layer**:错误信息最小化、敏感字段脱敏、避免回显注入 3. **Observability** - 在关键断点加日志/metrics/trace(但不记录 secrets) - 失败要“可定位”:错误码/上下文 key/相关 ID 4. **Tests** - 每层至少一个代表性测试:合法/非法/越权/边界条件 - 高风险路径补集成测试或 e2e 验证 ## Output Contract(stable) - Data path:关键路径与边界(简图/文字) - Risks:主要风险与触发条件 - Layers:每层做了什么防线(列表化) - Tests:新增/更新的验证点 - Residual risk:还剩哪些风险(以及为什么接受) ## Guardrails - 防线要“可证明有效”:不写空泛口号 - 任何会影响行为/接口的防线都必须评估兼容性与回滚策略