TL博士
大多数 API 安全漏洞都源于授权机制的缺陷,而不是特殊的漏洞利用。 OWASP API 安全十大风险类别中,前五大类别中有三项是授权失败,其中最主要的是…… BOLA.
你无法确保你不知道存在的东西的安全。 库存管理不当 它拥有自己专属的OWASP风险类别,也是其他所有控制措施所依赖的基础。
在部署前发现风险,而不是部署后。 对代码和 API 规范的静态分析发现一个损坏的端点。 pull request只需一个 commit运行时测试发现同样的问题,代价是发生一次安全事件。
这是一份需要持续运行的检查清单。 在每个 pull request并非预发布评测: 10个练习从库存和授权到速率限制、响应数据泄露和第三方信任。
您的 API 攻击面会随着每 pull request大多数团队只有在端点上线并开始接收流量后才会发现它暴露在外,这意味着修复工作原本需要花费大量资金。 commit 现在,审查工作需要提交一份事件报告。本指南将详细介绍在生产环境中真正有效的 API 安全最佳实践,并以清单的形式呈现,您可以立即将其应用于自己的代码库,而不是列出一些无人实践的抽象原则。
为什么 API 安全最佳实践现在看起来有所不同
API 曾经是连接各个系统的纽带。如今,它们几乎成了所有事物的主要接口:移动应用、合作伙伴集成、人工智能代理、内部微服务等等。这种转变改变了 API 保护最佳实践的涵盖范围。仅仅保护你已记录的 API 已经远远不够;你还必须考虑到团队构建但忘记记录的那些 API。
两个数字可以解释为什么这件事很重要。 OWASP API 安全 Top 10 该机构将授权问题列入五大风险类别中的三项,这意味着大多数实际的 API 安全事件都源于少数可预防的模式,而非罕见的零日漏洞。此外,不当的库存管理也被列为一项独立的风险类别:团队可能因为不知晓仍在运行的 API 而遭受攻击。
以下每一条都贯穿着同一个主题。良好的 API 管理最佳实践始于了解你拥有什么,而不仅仅是捍卫你记得记录的内容。
API 安全最佳实践概览
在详细清单之前,先来看简短版本:要实施什么,它实际能防止什么,以及紧迫程度。
| 练习 | 它能防止什么 | 优先 |
|---|---|---|
| HTTPS/TLS 加密 | 数据拦截、中间人攻击 | 其他要求 |
| 身份验证(OAuth 2.0、JWT) | 未经授权的访问、身份欺骗 | 其他要求 |
| 授权和访问控制 | 权限提升、数据泄露 | 其他要求 |
| 输入验证 | 注入攻击、格式错误的请求 | 其他要求 |
| 完整的 API 清单 | 未记录且已弃用的端点仍然暴露在外 | 其他要求 |
| 速率限制 | 暴力攻击、DDoS攻击、滥用 | 高 |
| API 密钥管理 | 凭证盗窃,未经授权的使用 | 高 |
| 记录和监控 | 未被发现的入侵事件,缓慢的事件响应 | 高 |
| 部署前的静态分析 | 在任何人审核之前,曝光就已经交付生产环境了。 | 高 |
| 安全测试(SAST + DAST) | 未知漏洞、回归 | 高 |
将“必需”行视为任何 API(无论是内部 API 还是面向公众的 API)的不可协商的基准。“高优先级”项则区分了能够及时发现问题的程序。 pull request 从事故报告中得知。
API 安全最佳实践清单
1. 在构建防御体系之前,先建立完整的库存清单。
你无法保护一个你都不知道存在的端点。所有 API 保护最佳实践都应从一份完整的清单开始:清单应包含每个端点、其方法、路径、所属服务和模块,以及是否需要身份验证。这些信息应同时从源代码和 API 规范(OpenAPI、Swagger)中提取,而不仅仅依赖于文档,因为被遗忘和孤立的端点恰恰隐藏在两者之间的空白处。
Xygeni 的定位: Xygeni API 安全性 它直接从您的应用程序源代码和 API 规范构建此清单,在任何端点进入生产环境之前,将您的团队记录的端点和无人记录的端点呈现出来。
2. 在对象和函数级别强制执行授权
对象级和函数级授权缺陷始终位列 OWASP API 安全十大问题之首。最佳实践并非“添加身份验证”,而是在每个请求中检查是否存在身份验证问题。 这位特定用户 允许访问 这个特定对象不仅仅是确认用户是否已登录。身份验证用于确定用户的身份。授权用于确定用户可以访问哪些内容,并且每次都需要进行检查,而不能仅凭有效的令牌来推断。
3. 验证并清理 API 接收的所有内容
所有参数、标头和正文字段在未经证实之前都被视为不可信输入。务必执行严格的模式验证,拒绝非预期字段(这是防止批量赋值的有效手段),并且永远不要依赖客户提供的数据来确定访问范围或定价逻辑。
4. 从设计之初就考虑速率限制和节流,而不是事后补救
不受限制的资源消耗会导致单个客户端耗尽您的基础设施资源,或导致按需付费的后端服务成本飙升。请为每个端点、每个用户和每个 API 密钥设置限制,并确保限制值能够根据实际操作成本进行调整,而不是采用统一的固定值。
5. 将每一次回复都视为潜在的数据泄露
当 API 返回的数据超过客户端所需,并依赖前端进行过滤时,就会发生数据过度泄露。这是一种习惯,而非罕见的错误,也是最常见的 API 安全最佳实践违规行为之一,因为只有当有人检查原始响应而非渲染后的 UI 时,才会发现问题。
Xygeni 的定位: Xygeni API 安全功能直接在 API 响应中标记 PII 泄露,在数据发布之前就发现过度共享,而不是在客户或监管机构注意到之后才发现。
6. 维护一份准确、最新的 API 清单,包括已弃用的 API。
不当 库存 API 管理之所以在 OWASP 列表中单独列为一个类别,是有原因的:已弃用的 API 版本和未记录的测试环境通常仍然可以访问,而且即使很久以后人们才想起它们的存在,它们仍然可能存在漏洞。API 管理最佳实践方案必须包含停用流程,而不仅仅是发现问题。
7. 仔细审查你的 API 对第三方的信任程度
不安全地使用第三方 API 的风险被低估了。开发者往往更信任来自其他 API 的数据,而不是用户输入,这恰恰本末倒置;第三方集成仍然是外部的、未经验证的来源,应该以同样的方式进行验证。
8. 向开发人员提供证据,而不仅仅是警报。
如果发现“此端点授权存在问题”,则需要有人先进行调查才能着手修复。而如果发现问题能够精确指出是哪个文件、类、方法还是行,开发人员就可以立即采取行动。这不仅是 API 的安全最佳实践,也是整个安全流程的最佳实践:需要先进行调查才能修复的问题会拖慢整个流程。
Xygeni 的定位: Xygeni API 的每一个安全漏洞都会指出具体的处理程序、文件、类、方法以及引入该漏洞的行号,因此修复工作会在发现漏洞的那一刻立即开始。
9. 在部署前而非部署后发现风险。
运行时 API 测试表明,当 API 开始处理流量时,某个端点就已经暴露出来了。而对代码和 API 规范的静态分析则发现,即使 API 尚未加载,也存在同样的暴露风险。 pull request当修复成本为一美元时 commit 而不是事件响应。最有效的 API 管理最佳实践将静态发现作为第一层,运行时测试作为第二层补充检查,用于验证已上线的功能。
Xygeni 的定位: Xygeni API 安全性采用静态设计,在发布前分析代码和规范,并与……协同工作。 Xygeni DAST 用于对已投入生产环境的应用程序进行运行时覆盖。
10. 将 API 风险与应用程序的其他风险放在同一层级。
API故障并非孤立发生。API漏洞通常存在于依赖项问题或配置错误等下游问题中。 pipeline或者,也可能是泄露的机密信息。将 API 安全视为一个独立的工具,并为其配备单独的控制台,意味着在最关键的时刻会丢失上下文信息。
Xygeni 的定位: API 安全性与 SAST, SCA,秘密, IaC而且,DAST 和 API 检测结果都集成在同一个 Xygeni 平台上,因此 API 检测结果会直接显示在导致该结果的代码和依赖项风险旁边,而不是单独显示。 login.
将清单变成一种习惯
API 安全最佳实践只有作为持续性实践才能发挥作用,而不是发布前的审查。对每个 API 运行清单和静态分析。 pull request而不是每季度一次。对待新的、未记录的端点,要像对待新的、未记录的依赖项一样:立即进行调查,而不是拖延。衡量 API 保护最佳实践的方式,要与衡量其他任何部分的方式相同。 SDLC关键在于你发现问题的速度,而不仅仅是你是否发现了问题。
快速解答:API 安全最佳实践问答
| 问题 | 回答 |
|---|---|
| 最重要的 API 安全最佳实践是什么? | 对每个端点都强制执行强大的身份验证和授权,而不仅仅是您记得保护的端点。 |
| 内部 API 是否应该使用 HTTPS? | 是的。对所有 API 流量进行加密,包括服务间的通信,而不仅仅是面向公众的端点。 |
| API密钥足以保障安全吗? | 不。API密钥识别的是应用程序,而不是用户。要进行真正的身份验证,需要将其与OAuth 2.0或JWT结合使用。 |
| BOLA是什么? | 对象级授权失败:API 未能验证用户是否有权访问特定资源。自 2019 年以来,它一直位列 OWASP API 安全十大漏洞榜首。 |
| API密钥应该多久轮换一次? | 定期检查,每 60 至 90 天一次,以及在任何疑似安全漏洞出现后立即检查。 |
| 限速返回的状态码应该是什么? | 429 请求过多,带有 Retry-After 标头,告诉客户端何时重试。 |
| 即使经过网关,我也需要在服务器上验证输入吗? | 始终如此。无论上游客户端或网关已经检查过什么,都必须在 API 层进行验证。 |
| 如何测试 API 安全性? CI/CD? | 检查每个系统的身份验证、授权、输入验证和速率限制。 pull request不仅要在发布前进行审核,而且要实现自动化审核,而不是依赖人工审核。 |
关键精华
- 储备物资优先于防御。 您无法对一个您不知道存在的端点应用授权、速率限制或数据控制,而不正确的库存管理本身就是 OWASP API 安全十大风险之一。
- 大多数安全漏洞都发生在授权环节,而不仅仅是身份验证环节。 OWASP API 安全风险排名前五的因素中,有三项是授权失败。验证用户身份与验证其访问权限是两回事。
- 静态分析可以发现运行时测试发现得太晚的问题。 在……中发现机会 pull request 成本为 1 commit在生产过程中发现这个问题会造成事故。
- 每一次回复都可能导致数据泄露。 过度暴露数据是一种习惯,而不是罕见的错误,而且只有当有人检查原始 API 响应而不是渲染后的 UI 时,才会发现这个问题。
- API 安全最佳实践只有养成持续的习惯才能真正发挥作用。在每个 pull request不是季度回顾,也不是发布前检查清单。
- API风险不应该存在于单独的工具中。 最有效的 API 保护最佳实践将 API 发现视为与代码、依赖项等相同的风险组成部分。 pipeline security,而不是一个独立的控制台。
常见问题解答
最重要的 API 安全最佳实践有哪些?
首先要进行清点。你无法对一个你都不知道存在的端点应用授权检查、速率限制或数据泄露控制,因此,对每个 API 端点进行完整、准确的清点是本清单中其他所有内容的基础。
API 安全最佳实践和通用应用程序安全最佳实践有什么区别?
API 引入了一些通用应用安全实践无法完全涵盖的风险:大规模的对象级和函数级授权、信任第三方 API 响应的特殊风险,以及追踪已弃用或未记录的端点的挑战。API 安全最佳实践是应用安全最佳实践的延伸,尤其适用于攻击面上最容易被忽视的部分。
API安全测试应该在部署前还是部署后进行?
两者兼有,但最具杠杆作用的时机是在之前。对代码和 API 规范进行静态分析,可以在问题尚未出现时就发现漏洞。 pull request运行时测试(DAST)则用于验证应用程序上线后实际可访问的内容。仅仅依赖运行时测试意味着每次修复的成本都会高于实际所需。
API清单应该多久更新一次?
持续地,理想情况下在每个 pull request. 一次建立并按季度审核的库存清单,一旦新的终端设备发货,就已经过时了,而这正是库存管理不当所造成的漏洞。
API 管理最佳实践是否适用于内部 API,而不仅适用于面向公众的 API?
是的。内部 API 的安全标准通常较低,因为它们“不暴露在互联网上”,但它们仍然处理敏感数据,并且任何拥有内部网络访问权限的人都可以访问它们,包括被盗用的帐户或内部人员。







