什么是 API 安全?

现代互联网的大部分都依赖于 API 来运行。API 安全是保护 API 免受攻击和数据泄露的过程。

学习目标

阅读本文后,您将能够:

  • 了解常见的 API 安全威胁
  • 解释 API 身份验证和授权
  • 描述保持 API 安全的技术

复制文章链接

什么是 API 安全?

应用程序编程接口 (API) 是一个软件与另一个软件互动的方式。如果一个程序或应用程序有 API,外部客户端可以向它请求服务。

API 安全是保护 API 免受攻击的过程。正如应用程序、网络和服务器可能会受到攻击一样,API 也可能成为许多不同威胁的受害者。

API 安全是 Web 应用程序安全的核心组件。大多数现代 Web 应用程序都依赖 API 来运行,而 API 允许外部各方访问它,从而给应用程序带来了额外的风险。就好像一家向公众开放办公室的企业:场所内有更多人,其中一些人可能不为企业员工所知,这会带来更大的风险。同样,API 允许外部人员使用程序,从而给 API 服务的基础设施带来更多风险。

有哪些常见的 API 安全风险?

  • 漏洞利用:漏洞利用是指攻击者向目标发送特别制作的数据,这些数据利用了目标结构中的缺陷。这些缺陷被称为“漏洞”,让攻击者能够以各种形式对 API 或其相应的应用程序进行非预期的访问。开放式 Web 应用程序安全项目 (OWASP) 维护了一个列表,列出了十大 API 漏洞,如 SQL 注入、安全错误配置等。如果一个漏洞利用的目标是以前不知道的漏洞,这被称为零日威胁——这种威胁非常难以阻止。
  • 基于身份验证的攻击:客户端在发出 API 请求之前需要进行身份验证,以便 API 服务器不会收到来自未知或非法来源的请求。有几种方法可以做到这一点,但每种方法都可能遭到入侵。例如,攻击者可以获取合法客户端的凭据、窃取 API 密钥或拦截并使用身份验证令牌。
  • 授权错误:授权决定了每个用户的访问级别。如果不仔细管理授权,API 客户端可能会访问不应该向其提供的数据,从而增加数据泄露的机会。
  • DoS 和 DDoS 攻击:向一个 API 发出过多的请求,会减慢或停止对其他客户端的服务。一些攻击者会故意向 API 发出大量请求,进行拒绝服务 (DoS)分布式拒绝服务 (DDoS) 攻击。

API 安全策略可以帮助减轻这些和其他风险。

强大的身份验证和授权措施有助于确保数据不泄露且只有授权的客户端才会发出 API 请求。DDoS 保护和速率限制可以关闭 DDoS 攻击。架构验证和使用 Web 应用程序防火墙 (WAF) 可以阻止漏洞利用。

速率限制和 DDoS 缓解如何帮助保护 API?

速率限制对某人在特定时间范围内重复操作的频率设置了上限。如果 API 客户端超过允许的请求数,速率限制将在一段时间内丢弃或阻止来自它们的进一步请求。

DDoS 缓解有助于阻止 DoS 和 DDoS 攻击。在 DDoS 攻击中,攻击者试图在短时间内用大量请求淹没 API。这些请求通常来自多个不同的来源。

速率限制和 DDoS 缓解对于 API 至关重要,原因如下:

  1. 阻止 DoS 和 DDoS 攻击。通过阻止或丢弃额外的请求,速率限制和 DDoS 缓解可防止 API 变得不堪重负。单独的速率限制可能无法阻止低速缓慢 DDoS 攻击,但 DDoS 缓解可以吸收额外的流量。
  2. 除了故意攻击之外,一些客户端可能只是过度使用 API。这会在计算能力方面消耗 API 服务,且可能会减慢其他客户端的服务速度。速率限制有助于防止 API 服务器过载。

如何阻止漏洞利用?

要使漏洞利用起作用,恶意 API 请求的结构必须使 API 以其架构师意想不到的方式进行响应。API 开发人员可以通过多种方式阻止此类恶意请求,其中最重要的两种方式为:

  1. 模式验证
  2. WAF 规则

模式验证

API 的架构描述了 API 的预期行为:它应该获得的请求类型和它应该提供的响应类型。不符合此架构的无效请求可能会导致 API 以意想不到的方式运行,从而可能导致数据泄漏。架构验证可识别无效请求和响应。通过阻止无效响应,API 开发人员可以避免某些类型的攻击并帮助防止数据泄露。

Web 应用程序防火墙 (WAF) 规则

WAF 的工作方式与传统的防火墙相似,因为它会阻止一些网络请求和响应,并允许其他请求和响应通过。它根据一组规则来做这件事:如果一个请求或响应违反了某个规则或符合某个规则,则会被阻止。WAF 被部署在 API 或 Web 应用程序前面,它监控 HTTP 流量。

可以设置 WAF 规则,阻止针对某个漏洞的请求和响应模式。WAF 规则还可以阻止来自某些 IP 地址的请求,这有助于阻止机器人攻击和其他攻击者。

为什么身份验证和授权对 API 安全如此重要?

身份验证确保 API 请求来自合法来源。授权让 API 服务器知道请求的客户端是否被授权获取请求的数据。

假设 Alice 构建了一个 API,而 Bob 构建了一个使用 Alice 的 API 的 Web 应用程序。当 Bob 的应用程序向 Alice 的 API 发送 API 请求时,他会在请求中附加一个标签,上面写着“这来自 Bob”。这会验证 Bob 的请求,以便 Alice 的 API 服务器知道将该请求视为合法请求。

Alice 的 API 服务器还会检查 Bob 拥有的权限。如果 Bob 的请求是针对 Alice 的 API 已标记为“Bob 可以看到”的数据,则服务器会满足该请求。但是,Alice 的 API 可能有一段数据标记为“不给 Bob 看到”,且当 Bob 是请求者时,服务器不应满足对该数据的请求。这就是为什么授权很重要。

(实际上,Bob 会在 API 请求中附加一个密钥或某种其他形式的身份验证,而不仅仅是一个标明“这来自 Bob”的标签。)

API 有多种身份验证方法。最常见的是:

1. API 密钥

向客户端分配一个一个密钥——即只有它们和 API 服务知道的一个唯一字符串。密钥附加到每个 API 请求。API 服务器在收到 API 请求时会检查密钥,以确保它来自经过身份验证的客户端。

这种身份验证方法的缺点是,如果密钥被盗,攻击者可以使用它来冒充合法客户端,然后可以进行各种攻击。使用 Transport Layer Security (TLS) 等加密协议对 API 的请求和响应进行加密非常重要——这样,密钥在通过互联网时不会以明文形式公开。

2. 用户名和密码

API 请求可以使用典型的用户名和密码凭据通过一种称为 HTTP 身份验证的方法进行身份验证。在 HTTP 身份验证中,用户名和密码被编码并添加到所有 API 请求的 HTTP 标头中。服务器可以检查这些凭据是否为所允许用户端的凭据,从而对请求进行身份验证。

这种方法带来了通常与密码相关的所有挑战:密码可能会丢失、泄露、被盗、被猜到或与不受信任方分享。密码也容易受到凭证填充暴力攻击等的影响。

3. OAuth 令牌

API 服务器不需要直接从客户端进行身份验证,而是可以使用 OAuth 协议从受信任的身份验证服务器获取身份验证令牌。要使用 API,用户需要登录第三方服务,而不是直接登录 API。与用户名和密码方法一样,这种身份验证方法容易受到凭证填充和其他攻击。

4. 双向 TLS(mTLS)

TLS 是一种加密协议,它在加载网页时在客户端和服务器之间创建一个加密的、经过身份验证的连接。TLS 还可以验证 API 连接的两端。

在双向 TLS (mTLS) 中,客户端和服务器都有一个 TLS 证书。它们使用这些证书相互验证,确保两者都是它们声称的身份,而无需依赖密码或其他身份验证方法。

然而,mTLS 的实施可能是一个挑战:所有 API 端点 和客户端都需要合法的 TLS 证书,这可能难以执行和维护。

什么是 API Shield?

Cloudflare API Shield 从一个仪表板启用多种 API 安全功能,以防止常见的 API 安全风险。API Shield 包括:

  • 用于 API 端点身份验证的 mTLS
  • 架构验证,它使用积极的安全模式,只允许符合 API 架构的请求
  • 数据丢失防护 (DLP),它扫描传出 API 的流量,检��是否存在敏感数据
  • 速率限制和 DDoS 缓解,确保 API 不会过载

进一步了解 API Shield