OWASP(Open Worldwide Application Security Project)是一个开放的应用安全社区。它提供安全标准、测试指南、工具和漏洞项目,其中最知名的是 OWASP Top 10

需要注意的是,Web Application Top 10API Security Top 10 不是同一份清单。前者关注整个 Web 应用,后者专门讨论 API 暴露出来的业务逻辑、数据和接口资产风险。

API 攻击面
图 1:API 不只是一个 URL,它连接着身份系统、业务服务、数据库和外部依赖。

为什么 API 需要单独讨论安全

传统页面通常由服务端决定展示什么,而 API 会直接返回结构化数据,并允许客户端传入对象 ID、字段和值。只要权限判断少做一层,就可能出现越权读取、敏感字段被修改或后台接口被普通用户调用。

API 还更容易被脚本批量调用,因此风险不只来自代码漏洞,也来自业务流程被自动化滥用,例如刷票、批量注册、撞库、薅券和短信轰炸。

2023 版 API Security Top 10

OWASP API Security Top 10 总览
图 2:十类风险可以归纳为授权身份、资源滥用、平台治理和外部依赖四组。

编号

风险

常见表现

核心防护

API1

对象级授权失效(BOLA)

修改订单 ID 后读到别人的订单

每次按对象校验归属关系

API2

身份认证失效

Token 可伪造、长期有效或未正确失效

使用成熟认证方案,限制令牌生命周期

API3

对象属性级授权失效(BOPLA)

返回过多字段,或允许修改 role、balance 等敏感字段

响应字段白名单、请求字段白名单

API4

不受限制的资源消耗

大分页、复杂查询、上传接口拖垮 CPU、内存或账单

限流、配额、分页上限、超时和成本控制

API5

功能级授权失效(BFLA)

普通用户直接调用管理端接口

在服务端校验角色与权限,不依赖前端隐藏按钮

API6

敏感业务流程被滥用

抢票、刷券、批量注册、自动评论

风控、频率限制、行为验证和业务配额

API7

服务器端请求伪造(SSRF)

接口根据用户 URL 请求内网或云元数据地址

URL 白名单、禁用私网地址、限制重定向和出网

API8

安全配置错误

调试接口暴露、CORS 过宽、默认口令、错误栈泄露

安全基线、自动检查、最小化暴露

API9

API 清单管理不当

旧版本、测试域名、影子接口长期在线

维护资产清单、版本负责人和下线机制

API10

不安全地使用第三方 API

直接信任第三方返回的数据或重定向地址

将外部数据视为不可信输入,校验、超时并隔离故障

最容易混淆的三类授权问题

授权问题在 10 项风险中占了很大比例,但它们控制的层级不同:

  • BOLA:用户能不能访问这个对象。

  • BOPLA:用户能不能读取或修改对象中的某个字段。

  • BFLA:用户能不能调用这个功能或接口。

BOLA 与 BOPLA
图 3:校验“订单是否属于当前用户”,不能替代对 role、balance 等敏感字段的单独控制。

一个接口可能同时存在三种问题。例如管理员修改用户信息的接口,如果只验证了登录状态,没有验证目标用户、调用者角色和可修改字段,那么对象级、功能级、属性级授权都会失效。

开发中真正需要落实的做法

1. 不信任客户端传入的身份和权限

userIdroletenantId 等字段不能直接作为授权依据。身份应从服务端验证过的会话或 Token 中取得,权限则由服务端重新计算。

2. 查询对象后立即校验归属

只写 findById(id) 不够。还要校验该对象是否属于当前用户、租户或当前角色允许访问的范围。更稳妥的方式是把权限范围直接写进查询条件。

3. DTO 使用字段白名单

不要把数据库实体直接作为请求参数或响应结果。请求 DTO 只接收允许修改的字段,响应 DTO 只返回业务真正需要展示的字段。

4. 限流不仅按 IP

共享出口、代理和机器人网络会削弱单纯 IP 限流的效果。实际项目通常要组合用户、设备、Token、接口、租户和业务动作进行配额控制。

5. 所有外部数据都按不可信处理

第三方 API、Webhook、对象存储回调和内部服务返回值,同样可能被篡改或异常污染。需要做格式校验、签名验证、超时、重试上限和熔断。

6. 维护真实的 API 资产清单

接口文档不等于资产清单。还需要记录域名、环境、版本、负责人、认证方式、数据级别和下线日期,避免测试接口与废弃版本成为长期入口。

API 安全生命周期
图 4:API 安全不是上线前扫一次漏洞,而是贯穿设计、编码、测试、发布和运行。

两个常见误区

误区一:接入 WAF 就安全了。

WAF 擅长拦截已知攻击特征,但很难判断“用户 A 是否有权读取订单 1001”。业务授权仍然必须在应用内部完成。

误区二:注入没有进入 2023 API Top 10,就不需要防。

Top 10 是风险意识清单,不是完整漏洞字典。SQL 注入、命令注入、XSS、CSRF 等问题依然存在,也仍需参数化查询、输入校验和安全编码。

总结

OWASP API Security Top 10 的重点不是让开发者背十个名词,而是提醒团队关注 API 的真实边界:

  • 谁在调用;

  • 能访问哪个对象;

  • 能读写哪些字段;

  • 能调用哪些功能;

  • 调用频率和成本是否可控;

  • 暴露了哪些版本和外部依赖。

把这些问题落实到统一鉴权、字段白名单、限流、资产治理和持续审计中,才是 API 安全真正有效的落地方式。

参考资料

  1. 知乎:《OWASP 是什么意思,OWASP TOP10 API 安全风险》
    https://zhuanlan.zhihu.com/p/690559140

  2. OWASP API Security Project
    https://owasp.org/www-project-api-security/

  3. OWASP API Security Top 10 — 2023
    https://owasp.org/API-Security/editions/2023/en/0x11-t10/

  4. Akamai:《OWASP 十大 API 安全风险:2023 年版终于问世》
    https://www.akamai.com/zh/blog/security/owasp-top-10-api-security-risks-2023-edition