所有文章 > API安全 > API安全最佳实践
API安全最佳实践

API安全最佳实践

随着计算技术的不断发展,我们生活在一个可以控制大多数事物的世界。我们能够使用手机等计算设备或任何其他智能设备轻松满足我们大部分的日常需求。随着计算技术的发展,如今的科学家和工程师已经建立了具有更高智商的人工智能模型。

所有这些背后,都是多个系统为实现共同目标而进行通信的结果。这就是 API 发挥作用的地方。API 帮助系统与外部系统进行通信,使其他系统可以访问其功能。如今,API 几乎无处不在,使整个世界得以连接,一切都紧密相连。

另一方面,随着 API 的大量使用,我们面临着黑客不当或无意使用 API 的巨大威胁。此外,如果 API 未正确实施、配置或使用,则数据可能会丢失或被他人窃取。这就是我们需要 API 安全最佳实践的地方,以使它们稳定并避免易受攻击的使用。

当我们谈论保护 API 时,我们可以从不同的层面进行。我们需要从 API 设计阶段开始规划 API 的安全性。如果没有适当的 API 设计,我们很容易忘记在实际实现 API 阶段必须注意的一些事实。

在本文中,我们将研究以下类别下的一些安全最佳实践,我们在构建 API 时可以关注这些实践。

  • 开发实践
  • 部署和访问
  • API 测试
  • API 契约和文档

现在让我们仔细看看上面提到的每件事,以便更好地理解以及为什么我们需要关心这些。

开发实践

API 是外部用户访问系统内置功能的接口。因此,如果我们没有正确设计和实施 API,未经授权的人员就有可能获得访问权限并操纵我们系统中可用的业务功能。因此,未能防范此类事件将直接对我们造成以下一种或多种影响。

  • 服务中断
  • 商业信息丢失
  • 披露我们的业务战略
  • 声誉受损
  • 失去信誉
  • 失去消费者群体
  • 业务损失

除了上述影响之外,还有很多不利影响可能会对我们的业务和社会关系产生影响。这就是为什么我们需要对 API 进行适当的设计和实施。

API 开发人员应始终尽可能遵循通用 API 标准和最佳实践。遵循标准、最佳实践和框架将有助于我们简化 API 实施,同时减少 API 中出现此类安全漏洞的可能性。因此,我们的目的是提供一些开发最佳实践来减少此类事件。有很多标准、最佳实践和框架可用于这些,我们将在这里讨论一些关键问题或实践。

  1. 选择正确的 HTTP 方法
    处理 API 时,我们需要确定 API 的范围以及要处理的数据类型。基本上,当我们需要发送一些敏感数据时,使用 POST API 调用总是比使用 GET API 调用更好。原因是当我们使用 GET API 调用时,随 GET API 调用一起发送的数据很容易读取。但是当我们使用 POST API 调用时,数据会在请求正文中发送,相对安全。使用 REST API 标准,根据需求的性质定义了一组 HTTP 方法。其中一些 HTTP 方法是 GET、POST、PUT、PATCH 和 DELETE。
  2. 输入验证
    验证输入至关重要,因为我们不能总是期望只获得预期的数据。API 总是有可能从合法和非法用户那里收到意外的数据输入。因此,API 开发人员有责任过滤掉这些不正确的数据并仅对有效数据做出反应。在输入验证下,我们将讨论一些事情以及我们可以做些什么来改进它们。
  3. 输出验证
    术语“输出验证”是指控制和处理作为 API 调用响应发送的数据的过程。通常,数据库可能存储了一些敏感信息以及其他信息。例如,我们保存了身份验证相关信息、交易相关信息,如果将这些信息暴露给外部,则可能存在风险。因此,我们需要采取适当的措施来防止将这些数据发送给消费者,或者至少更改内容以避免潜在风险。在这里,我们将讨论其中的一些内容,以便对要求有一个大致的了解。
  4. 身份验证和授权
    如果您正在构建 API,我们的主要考虑因素之一就是控制对 API 的访问。控制对 API 的访问的一种方法是通过身份验证和授权。此过程基本上控制了对 API 的未经授权的访问,并提高了受保护信息的保证。

部署实践

API 开发完成后,关注部署相关的安全最佳实践也同样重要。在这里我们将讨论一些可以采取的措施或方法,以减少 API 可能面临的潜在安全问题。

  1. 使用 HTTPS/TLS
    通常,通过 HTTP 协议使用 API 并不安全。但如果我们使用 HTTPS,我们将对通信进行端到端加密。因此,我们对数据和资源更有信心,因为它们以加密方式安全地通过网络传输。此外,使用 HTTPS 可以防止中间人攻击。其他主要优点包括数据完整性、用户信任/信心、防止会话劫持和代码注入攻击等等。
  2. CI/CD 流水线
    CI/CD 自动化有助于间接提高 API 的安全性。当我们设置 CI/CD 流程时,我们还可以设置其他作业与自动构建和部署流程一起运行。例如,可以在 CI 管道中执行静态代码分析、依赖项扫描、单元测试、自动安全测试、安全代码审查、安全衬垫。
  3. 防火墙的使用
    防火墙在 API 安全中发挥着至关重要的作用,它在 API 基础设施和潜在威胁之间提供了一道保护屏障。我们可以定义不同类型的防火墙,为 API 提供不同级别的保护。Web 应用程序防火墙 (WAF) 可用于防御常见的 Web 攻击,如 SQL 注入、跨站点脚本 (XSS) 和跨站点请求伪造 (CSRF)。WAF 允许您定义安全策略来控制和监视 HTTP 流量,确保遵守安全最佳实践。API 网关防火墙可用于控制和过滤传入的 API 请求。这有助于根据 IP 地址、身份验证令牌或其他标准实施访问控制策略。
  4. 速率限制
    应用程序网关防火墙的另一大优势是速率限制。API 速率限制是一种机制,用于控制客户端或用户在指定时间范围内对 API 发出的请求数量。速率限制的主要目标是防止滥用、防止拒绝服务 (DoS) 攻击以及确保公平使用 API 资源。通过对 API 施加速率限制,API 提供商可以管理服务器负载、维护服务器可用性并防止不可预测的高需求。我们可以使用不同的速率限制算法来实现这一点。两种最流行的速率限制算法是令牌桶和漏桶。为了向消费者指示过载请求,我们可以使用不同的方法。我们主要可以使用响应代码 429 和速率限制标头来向消费者传达状态。
  5. 服务器可访问性
    当我们将 API 部署到服务器或服务器集群时,我们必须确保只公开最低要求。例如,如果我们有一个带有数据库服务器的 API 服务器,我们可以禁用对数据库服务器的公共访问。此外,我们可以禁用 API 服务器的默认 SSH 端口访问,并使用自定义 SSH 端口。我们可以仅通过使用自定义 SSH 端口的跳转/堡垒服务器允许访问 API 服务器。这只是一个例子。遵循可用的标准、最佳实践、框架和指南将帮助我们保护服务器免受此类意外访问,并顺利为我们的消费者提供服务。
  6. 监控
    监控在 API 安全方面发挥着重要作用。有效的监控有助于 API 提供商检测和应对安全事件,并确保 API 的可用性和性能。此外,监控还能提供有关潜在威胁和漏洞的见解。API 安全最佳实践中监控的关键方面包括日志记录和审计、实时流量分析、速率限制监控、资源使用情况、性能监控等等。通过这种方式,我们可以对部署进行大量调整和调优,使 API 高度安全并持续供消费者使用。

API 测试

测试是任何软件开发过程中的主要要求,因为它为我们将产品推向生产级提供了许多优势。API测试的一些优点包括:

  • 业务需求的验证与确认
  • 及早发现问题
  • 性能和可靠性
  • 安全
  • 兼容性和合规性

有不同类型的测试方法可用于实现不同的目标。但我们将介绍其中的一些。但最好进行更多测试以确保产品达到所需的期望。

  1. 单元测试
    API 开发人员应该为每个 API 实施足够数量的单元测试,以确保 API 正常运行。通常,我们实施单元测试来验证业务需求的不同场景,以确保产品按预期运行。我们可以将单元测试与 CI 流程集成,以确保它们在集成新更改之前运行。这将确保我们没有任何易破坏的更改。
  2. 集成测试
    集成测试涉及测试不同组件或系统之间的交互。对于 API,这意味着验证不同的 API 端点是否按预期协同工作以及数据是否正确交换。
  3. 负载测试
    负载测试评估 API 在特定负载或流量下的表现。它有助于识别性能瓶颈、响应时间和整体系统可扩展性。
  4. 压力测试
    压力测试涉及在极端条件下(例如高流量)测试 API,以确定其在压力下的稳定性和行为。这种类型的测试有助于识别 API 的断点和潜在的故障模式。这些测试特别有助于我们了解针对 DoS 和 DDoS 攻击的证明。
  5. 安全测试
    安全测试侧重于识别漏洞并确保 API 能够抵御安全威胁。这包括对常见安全问题(如注入攻击、身份验证和授权问题以及数据暴露风险)的测试。除了上述测试之外,我们还需要进行不同类型的测试,以确保 API 满足我们的业务需求。其中一些测试方法是回归测试、端到端测试、冒烟测试、自动化测试。

API 契约和文档

如今,我们有不同类型的软件开发方法。其中之一是 API 设计优先方法。API 设计优先有助于在开始其他实现之前先定义 API 契约。这将帮助利益相关者提前定义 API 要求(包括安全要求)。这将导致根据利益相关者的协议定义强大的 API 契约。然后,各方的开发团队可以根据定义的 API 契约独立开始其功能的工作。

定义 API 契约并编写 API 文档有很多好处。API 提供者和 API 使用者都可以从使用 API 契约和文档中获益

  • 清晰度和理解度
  • 轻松入职并减少支持负担
  • 版本控制支持
  • 开发人员参与
  • 团队间的一致性
  • 明确的整合指导方针
  • 节省时间和资源

API 文档可以通过多种方式完成。最流行和标准的方式是使用开放 API 规范定义 HTTP API。开放 API 规范被广泛认可为 HTTP API 的 API 文档标准。开放 API 规范能够以正确组织的方式定义我们的 API 端点。它还允许我们定义服务器、安全方案、可重用组件等等。已经开发了不同的工具来使用开放 API 规范进行此类 API 文档编制。

结论

由于 API 是与不同类型的系统和受众进行沟通的最常见桥梁,因此 API 提供商有责任使用标准 API 设计原则和最佳实践来设计 API。如今,安全性是 API 的主要关注点,因为随着 API 的大量使用,我们面临的反击也成比例或指数级增加。因此,在设计、开发、部署和测试 API 时始终需要遵循安全最佳实践,以最大限度地减少可能受到的影响。更好的 API 契约设计将为您节省大量问题,同时为您带来很多优势。最好使用标准方式来设计满足您的 API 需求的 API 契约。开放 API 规范是一项非常棒的标准,大多数开发人员都遵循它来设计基于 HTTP 的 API。在设计中使用开放 API 规范标准支持的工具总是更好的选择,因为它提供的不仅仅是 API 设计。

文章来源:API Security Best Practices

#你可能也喜欢这些API文章!