深入剖析 OWASP Top 10 2021:从失效的访问控制到服务端请求伪造

引言

OWASP Top 10 是全球 Web 安全领域最具权威性的风险清单之一。2021 年发布的版本相较于 2017 年发生了显著变化,不仅重新排列了风险优先级,还新增了多个与现代应用架构密切相关的类别。本文将逐一剖析 OWASP Top 10 2021 中的十大安全风险,重点聚焦排名第一的“失效的访问控制”以及新晋入选的“服务端请求伪造(SSRF)”,帮助开发者和安全从业者深入理解这些威胁的本质与防御策略。

A01:失效的访问控制(Broken Access Control)

失效的访问控制从 2017 年的第五位跃升至 2021 年的第一位,成为最严重的安全风险。其核心问题在于:应用程序未能正确验证用户是否有权执行特定操作或访问特定资源。

常见场景包括:

  • 水平越权:用户 A 可以查看或修改用户 B 的数据,例如通过修改 URL 中的用户 ID 访问他人订单。
  • 垂直越权:普通用户能够执行管理员操作,例如直接访问 /admin 路径而未被拦截。
  • CORS 配置错误:允许任意来源的跨域请求,导致敏感数据泄露。
  • 目录遍历:通过 ../ 等路径穿越手段访问未授权文件。

防御建议:采用“默认拒绝”原则,在服务端对每一次请求进行权限校验;使用基于角色的访问控制(RBAC)或基于属性的访问控制(ABAC);避免仅依赖前端隐藏菜单或按钮来实现权限控制。

A02:加密机制失效(Cryptographic Failures)

该类别取代了此前的“敏感数据暴露”,更加强调加密层面的根本性缺陷。典型问题包括:

  • 使用已被破解的算法(如 MD5、SHA-1)存储密码;
  • 传输层未启用 TLS 或配置不当;
  • 密钥硬编码在代码仓库中;
  • 使用 ECB 模式进行块加密,导致模式泄露。

防御建议:对敏感数据实施强加密(如 AES-256-GCM);密码存储使用 bcrypt、scrypt 或 Argon2;全站启用 HTTPS 并配置 HSTS;密钥通过专用密钥管理服务(KMS)管理。

A03:注入(Injection)

注入漏洞依然稳居前三,包括 SQL 注入、NoSQL 注入、命令注入、LDAP 注入等。尽管这一风险已被广泛认知,但因遗留代码和框架误用,注入问题仍然普遍存在。

防御建议:使用参数化查询或预编译语句;对用户输入进行严格的类型校验和白名单过滤;避免将用户输入直接拼接至命令或查询中;使用 ORM 框架时注意其底层实现是否安全。

A04:不安全设计(Insecure Design)

这是 2021 年新增的类别,强调安全左移——在软件设计阶段就应考虑安全威胁。不安全设计不同于实现缺陷,它指的是架构层面缺乏安全控制,例如:

  • 未设计账户锁定机制,导致暴力破解可行;
  • 密码找回流程仅依赖安全问题,容易被社工攻击;
  • 未对业务逻辑进行滥用场景分析。

防御建议:采用威胁建模方法(如 STRIDE);编写安全设计文档;对关键业务流程进行滥用案例评审;引入安全设计模式库。

A05:安全配置错误(Security Misconfiguration)

该风险涵盖范围极广,包括:

  • 默认账户和密码未修改;
  • 错误页面泄露堆栈信息;
  • 云存储桶权限开放;
  • 不必要的功能或端口未关闭;
  • 安全响应头缺失。

防御建议:建立自动化配置基线;使用基础设施即代码(IaC)并进行安全扫描;定期审计云环境权限;关闭生产环境中的调试模式。

A06:易受攻击和过时的组件(Vulnerable and Outdated Components)

现代应用大量依赖第三方库和框架,一旦这些组件存在已知漏洞(CVE),整个应用即面临风险。Log4Shell 事件便是典型案例。

防御建议:使用软件物料清单(SBOM)追踪依赖;集成 SCA 工具(如 OWASP Dependency-Check、Snyk)持续扫描;建立组件升级和补丁管理流程。

A07:身份识别和认证失败(Identification and Authentication Failures)

该类别关注认证机制本身的弱点,例如:

  • 允许弱密码或常见密码;
  • 无多因素认证(MFA);
  • 会话 ID 暴露在 URL 中;
  • 会话固定攻击。

防御建议:强制实施 MFA;使用强密码策略并检查泄露密码库;会话令牌应具备足够的熵并在登出后失效;限制登录尝试次数。

A08:软件和数据完整性失败(Software and Data Integrity Failures)

新增类别,聚焦于不信任的 CI/CD 流水线、自动更新机制和反序列化漏洞。例如,攻击者入侵 npm 包并植入恶意代码,或利用不安全的反序列化执行远程代码。

防御建议:对软件发布进行数字签名;使用可信源获取依赖;避免对不可信数据执行反序列化;保护 CI/CD 管道安全。

A09:安全日志和监控失败(Security Logging and Monitoring Failures)

缺乏有效的日志记录和实时监控,导致入侵行为无法被及时发现。常见问题包括:日志未记录关键事件、日志未集中管理、告警阈值不合理。

防御建议:记录认证、访问控制、输入验证等关键事件;使用 SIEM 平台集中分析;建立告警和响应流程;确保日志本身不被篡改。

A10:服务端请求伪造(SSRF)

SSRF 是 2021 年新加入的类别,尽管在 2017 年它曾被归入“未验证的重定向和转发”。SSRF 发生在应用从用户可控的 URL 获取远程资源时,攻击者可借此探测内网、访问云元数据接口(如 169.254.169.254)或执行内部服务攻击。

典型场景

  • 图片加载功能允许用户输入 URL;
  • Webhook 配置未限制目标地址;
  • 文件导入功能从远程 URL 拉取内容。

防御建议

  • 对用户提供的 URL 实施白名单校验;
  • 禁用不必要的 URL 协议(如 file://gopher://);
  • 使用网络层隔离,限制服务器出站流量;
  • 对云环境启用 IMDSv2 并限制元数据访问;
  • 避免将原始响应返回给用户。

总结

OWASP Top 10 2021 反映了现代 Web 应用面临的核心安全挑战。从排名第一的失效访问控制到新晋的 SSRF,每一项风险都对应着真实世界中的攻击案例。安全不是一次性的工作,而是贯穿需求、设计、开发、测试和运维全生命周期的持续过程。开发者应将这十项风险作为基线,结合威胁建模、安全编码规范和自动化工具,构建纵深防御体系,从而有效降低被攻击的概率与影响。

未经允许不得转载:任鹏个人博客 » 深入剖析 OWASP Top 10 2021:从失效的访问控制到服务端请求伪造

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏