TOP6-Insecure Design(不安全设计)

993 字
0 浏览

OWASP Top 10:2025 里,Insecure Design 排在 A06,也就是第 6 位。它从 2021 年的第 4 位降到了第 6 位,但这并不代表它不关键。相反,OWASP 把它保留在榜单里,就是因为很多严重安全问题并不是“代码写错了”,而是从需求、流程、权限模型、业务状态机、租户隔离到失败状态设计,一开始就没有把安全控制设计进去
来源:OWASP Top 10:2025 Introduction
来源:A06:2025 Insecure Design

你可以把它和“实现缺陷”分开理解:

  • Insecure Implementation:本来设计是对的,但写代码时写坏了。
  • Insecure Design:设计阶段就没把控制做出来,后面代码写得再认真,也只是把一个不安全的方案实现得更稳定。

OWASP 官方强调的重点
这个类别的核心表述是 “missing or ineffective control design”,也就是“控制缺失”或“控制设计无效”。OWASP 还特别强调三件事:

  • 需求与资源管理要把安全要求谈清楚
  • 设计阶段要做威胁建模
  • 开发过程要有安全开发生命周期,而不是等上线前才补洞

常见表现

  • 找回密码依赖“安全问题答案”这类天然不可靠的方案。
  • 认证、授权、关键业务流没有做威胁建模。
  • 业务状态机允许跳步、重复消费、并发绕过、异常回退不一致。
  • 多租户隔离只靠表字段,没有架构或边界层面的强隔离。
  • 关键业务没有考虑失败流、误用流和攻击流。
  • 缺乏反机器人、反批量滥用、反羊毛的业务规则。
  • 安全需求没有进入用户故事、验收标准和设计文档。

OWASP 官方典型场景

  • 用“密保问题”做找回密码,实际上谁都可能知道这些答案,根本不能作为身份证明。
  • 影院预订系统有团体折扣和押金规则,但没有防滥用设计,攻击者可以用极少请求锁掉大量座位,直接造成业务损失。
  • 电商系统没有针对抢购机器人做业务规则设计,黄牛脚本可以瞬间扫空高价值商品,引发品牌和用户层面的连锁损害。

怎么防

  • 在需求阶段就定义机密性、完整性、可用性、真实性等保护要求。
  • 把安全活动前移到编码之前,尤其是认证、授权、关键业务流和数据流的设计阶段。
  • 建立并复用安全设计模式或“铺装路”组件,而不是每个团队自己发明。
  • 对关键流程做威胁建模,重点关注访问控制、业务逻辑、失败状态和异常状态。
  • 在用户故事里写清楚正常流、失败流、误用流。
  • 对前后端每一层都做合理性检查,不让错误状态一直向下传播。
  • 为关键流编写单元测试和集成测试,不只验证“能跑通”,还要验证“能抗滥用”。
  • 对高暴露系统和多租户系统做更强的分层与隔离设计。

一句话总结
Insecure Design 的本质是:系统不是后来才被写坏的,而是一开始就没有把正确的安全控制设计进去。

Licensed under CC BY-NC-SA 4.0