48 lines
2.2 KiB
Markdown
48 lines
2.2 KiB
Markdown
---
|
||
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
|
||
- 防线要“可证明有效”:不写空泛口号
|
||
- 任何会影响行为/接口的防线都必须评估兼容性与回滚策略
|