什么是 API
API(Application Programming Interface,应用程序编程接口)是一种允许软件系统之间交换信息的机制。例如,天气应用从服务器获取最新预报数据,或者第三方服务利用社交媒体平台的登录功能时,都会用到 API。
现代互联网服务通过 API 相互连接。最常见的 API 格式包括 REST(Representational State Transfer),以其简洁的基于 URL 的设计著称;以及 GraphQL,允许客户端灵活指定所需的数据。
为什么 API 安全很重要
API 是向外部暴露数据和功能的接口。移动应用、IoT 设备、Web 服务以及无数其他系统都通过 API 进行通信,其数量正在快速增长。
如果 API 被攻击者利用,可能导致大规模个人数据泄露或服务被非法操控。无论 Web 应用的前端多么坚固,底层 API 的漏洞都会从根本上破坏安全性。
常见的 API 攻击
API 面临多种攻击技术的威胁。
- 身份验证缺陷 - 当 API 密钥或令牌管理不当时,攻击者可以冒充合法用户
- 过度数据暴露 - 当 API 返回超出必要范围的信息,导致敏感数据泄露
- 注入攻击 - 通过恶意输入操纵数据库的 SQL 注入或 NoSQL 注入
- 速率限制绕过 - 绕过 API 调用限制发送大量请求
- BOLA(对象级授权缺陷)- 未经授权访问其他用户的数据。在 OWASP 公开的 API 安全风险清单中,2019 年版与 2023 年版均将其列为第 1 位
身份验证与授权基础
API 安全的核心是正确实现身份验证和授权。身份验证确认"你是谁",而授权控制"你被允许做什么"。
API 密钥
API 密钥是用于标识 API 访问的字符串。虽然实现简单,但密钥一旦泄露就会导致未授权访问。基本原则是通过环境变量管理 API 密钥,绝不将其硬编码在源代码中。
OAuth 2.0
OAuth 2.0 是一种授权框架,无需将用户密码共享给第三方即可授予有限的访问权限。"使用 Google 登录"和"使用 X(原 Twitter)登录"等功能都基于 OAuth 2.0 构建。
JWT(JSON Web Token)
JWT 是一种以紧凑 JSON 格式表示身份验证信息的令牌标准。它由头部、载荷和签名三部分组成,可以检测篡改。但如果 JWT 的过期设置或签名验证实现不当,可能会产生安全风险。
速率限制与流量控制
速率限制是对给定时间段内允许的 API 请求数量进行限制。它对于维护 API 稳定性和保护服务免受恶意大量请求至关重要。
- DDoS 防护 - 防止大规模请求洪水导致的服务中断
- 暴力破解防护 - 限制针对登录 API 的撞库攻击。与速率限制配合引入 CAPTCHA,能更有效地抑制机器人发起的自动化攻击
- 公平资源分配 - 防止单个用户独占资源
- 成本管理 - 在云环境中,API 调用量直接影响成本,因此防止未授权的大量调用在经济上也很重要
流量控制不是立即拒绝超出速率限制的请求,而是降低处理速度。这是一种在保护服务的同时维持用户体验的平衡方法。
对个人用户的影响
API 安全不仅是开发者的事,它也直接影响每一位普通用户。
移动应用与 API
智能手机应用通过后端 API 收发数据。如果应用的 API 存在漏洞,你的个人信息可能面临风险。请使用来自可信开发者的应用,避免授予不必要的权限。
第三方应用权限
与社交媒体或云服务集成的第三方应用通过 API 访问你的数据。在授权时,请仔细审查该应用能够访问哪些数据。
通过 API 的数据共享
你使用的服务之间可能通过 API 相互共享数据。查看隐私政策了解你的数据是如何被共享的,这是符合零信任安全模型的自我保护第一步。
了解 API 安全基础知识能帮助你在选择服务和管理应用权限时做出更好的决策。结合强大的密码安全措施,有助于增强整个数字生活的安全性。用 IP 确认查看浏览器的安全评分、养成日常安全检查的习惯,也同样有效。
此外,若能事先了解滥用 API 的供应链攻击手法,就能建立更为全面的安全意识。
相关术语
常见问题
为什么不能把 API 密钥直接写进源代码?
一旦源代码被公开到 GitHub 等平台,API 密钥就会泄露,可能被盗用并产生高额账单。请使用环境变量或密钥管理服务,把代码和密钥分开。
API 为什么需要速率限制?
没有速率限制,DDoS 攻击或暴力破解可能拖垮服务器,单个用户也可能独占资源。恰当的速率限制对服务的稳定性和安全性都有帮助。