现代互联网的大部分都依赖于 API 来运行。API 安全是保护 API 免受攻击和数据泄露的过程。
阅读本文后,您将能够:
复制文章链接
应用程序编程接口 (API) 是一个软件与另一个软件互动的方式。如果一个程序或应用程序有 API,外部客户端可以向它请求服务。
API 安全是保护 API 免受攻击的过程。正如应用程序、网络和服务器可能会受到攻击一样,API 也可能成为许多不同威胁的受害者。
API 安全是 Web 应用程序安全的核心组件。大多数现代 Web 应用程序都依赖 API 来运行,而 API 允许外部各方访问它,从而给应用程序带来了额外的风险。就好像一家向公众开放办公室的企业:场所内有更多人,其中一些人可能不为企业员工所知,这会带来更大的风险。同样,API 允许外部人员使用程序,从而给 API 服务的基础设施带来更多风险。
API 安全策略可以帮助减轻这些和其他风险。
强大的身份验证和授权措施有助于确保数据不泄露且只有授权的客户端才会发出 API 请求。DDoS 保护和速率限制可以关闭 DDoS 攻击。架构验证和使用 Web 应用程序防火墙 (WAF) 可以阻止漏洞利用。
速率限制对某人在特定时间范围内重复操作的频率设置了上限。如果 API 客户端超过允许的请求数,速率限制将在一段时间内丢弃或阻止来自它们的进一步请求。
DDoS 缓解有助于阻止 DoS 和 DDoS 攻击。在 DDoS 攻击中,攻击者试图在短时间内用大量请求淹没 API。这些请求通常来自多个不同的来源。
速率限制和 DDoS 缓解对于 API 至关重要,原因如下:
要使漏洞利用起作用,恶意 API 请求的结构必须使 API 以其架构师意想不到的方式进行响应。API 开发人员可以通过多种方式阻止此类恶意请求,其中最重要的两种方式为:
API 的架构描述了 API 的预期行为:它应该获得的请求类型和它应该提供的响应类型。不符合此架构的无效请求可能会导致 API 以意想不到的方式运行,从而可能导致数据泄漏。架构验证可识别无效请求和响应。通过阻止无效响应,API 开发人员可以避免某些类型的攻击并帮助防止数据泄露。
WAF 的工作方式与传统的防火墙相似,因为它会阻止一些网络请求和响应,并允许其他请求和响应通过。它根据一组规则来做这件事:如果一个请求或响应违反了某个规则或符合某个规则,则会被阻止。WAF 被部署在 API 或 Web 应用程序前面,它监控 HTTP 流量。
可以设置 WAF 规则,阻止针对某个漏洞的请求和响应模式。WAF 规则还可以阻止来自某些 IP 地址的请求,这有助于阻止机器人攻击和其他攻击者。
身份验证确保 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 有多种身份验证方法。最常见的是:
向客户端分配一个一个密钥——即只有它们和 API 服务知道的一个唯一字符串。密钥附加到每个 API 请求。API 服务器在收到 API 请求时会检查密钥,以确保它来自经过身份验证的客户端。
这种身份验证方法的缺点是,如果密钥被盗,攻击者可以使用它来冒充合法客户端,然后可以进行各种攻击。使用 Transport Layer Security (TLS) 等加密协议对 API 的请求和响应进行加密非常重要——这样,密钥在通过互联网时不会以明文形式公开。
API 请求可以使用典型的用户名和密码凭据通过一种称为 HTTP 身份验证的方法进行身份验证。在 HTTP 身份验证中,用户名和密码被编码并添加到所有 API 请求的 HTTP 标头中。服务器可以检查这些凭据是否为所允许用户端的凭据,从而对请求进行身份验证。
这种方法带来了通常与密码相关的所有挑战:密码可能会丢失、泄露、被盗、被猜到或与不受信任方分享。密码也容易受到凭证填充和暴力攻击等的影响。
API 服务器不需要直接从客户端进行身份验证,而是可以使用 OAuth 协议从受信任的身份验证服务器获取身份验证令牌。要使用 API,用户需要登录第三方服务,而不是直接登录 API。与用户名和密码方法一样,这种身份验证方法容易受到凭证填充和其他攻击。
TLS 是一种加密协议,它在加载网页时在客户端和服务器之间创建一个加密的、经过身份验证的连接。TLS 还可以验证 API 连接的两端。
在双向 TLS (mTLS) 中,客户端和服务器都有一个 TLS 证书。它们使用这些证书相互验证,确保两者都是它们声称的身份,而无需依赖密码或其他身份验证方法。
然而,mTLS 的实施可能是一个挑战:所有 API 端点 和客户端都需要合法的 TLS 证书,这可能难以执行和维护。
Cloudflare API Gateway 从一个仪表板启用多种 API 安全功能,以防止常见的 API 安全风险。API Gateway 包括: