为什么速率限制很重要?用于速率限制的算法是什么?

速率限制是一种限制网络流量以防止用户耗尽系统资源的技术。速率限制使恶意行为者更难使系统负担过重并导致拒绝服务(DoS) 等攻击。这涉及攻击者向目标系统发送请求并消耗过多的网络容量、存储和内存。

为什么速率限制很重要?用于速率限制的算法是什么?-南华中天

使用速率限制的 API 可以限制或暂时阻止任何试图进行过多 API 调用的客户端。它可能会在指定时间内减慢受限用户的请求或完全拒绝它们。速率限制可确保合法请求可以到达系统并访问信息,而不会影响整体应用程序的性能。这是关于网站安全的系列文章的一部分。

为什么速率限制很重要?

速率限制是现代网络安全策略的重要组成部分。它解决了影响传入请求率的几种攻击技术。

分布式拒绝服务 (DDoS)

DDoS 攻击试图用流量淹没目标系统,使其对合法用户不可用。速率限制通过防止任何给定流量源发送过多请求来减轻 DDoS威胁。然而,DDoS 攻击具有独特的挑战,因为它们在许多不同的来源(有时是数百万个 IP 地址)之间分发请求。分发攻击允许每个源避免超过速率限制。安全解决方案应将来自不同位置的请求识别为单一攻击的一部分,并将它们视为单一来源。

凭据填充

当攻击者破坏包含用户凭据的数据库时,他们可以使用这些凭据进行进一步的攻击。通常,机器人会将窃取的用户凭证填充到登录表单中,直到凭证集起作用,从而允许机器人访问帐户。机器人通常非常成功,因为它们可以将数百或数千个凭据提交到登录表单中。速率限制有助于识别信用填充并在机器人接管帐户之前阻止它们。

为什么速率限制很重要?用于速率限制的算法是什么?-南华中天

蛮力

暴力攻击类似于凭据填充攻击,但没有真实用户凭据列表。在这种情况下,机器人会系统地提交随机生成的凭据,直到凭据集起作用。高度安全的 Web 应用程序设置密码要求有助于减轻暴力攻击,但大型攻击仍会消耗许多网络资源。速率限制阻止这些攻击以节省系统资源。

数据抓取和盗窃

恶意行为者经常抓取目标网站以获取他们可以出售或用来削弱竞争对手的信息。例如,攻击者可能会窃取电子商务公司的定价信息。爬虫机器人可以从目标应用程序复制大量数据。速率限制检测并阻止数据抓取。

库存拒绝

库存拒绝或库存囤积攻击涉及将机器人发送到目标 Web 应用程序,在那里它们开始交易而不完成交易。它囤积库存,使合法用户无法使用。

在我们的详细指南中了解更多信息:

  • 机器人
  • 机器人管理

速率限制如何工作?

速率限制在应用程序中起作用,而不是在 Web 服务器中起作用。速率限制通常涉及跟踪发出请求的 IP 地址并识别请求之间的时间间隔。IP 地址是应用程序识别每个请求的发出者的主要方式。

为什么速率限制很重要?用于速率限制的算法是什么?-南华中天

速率限制解决方案通过测量来自给定 IP 地址的每个请求之间经过的时间并跟踪在设定时间范围内发出的请求数来工作。如果一个 IP 地址在指定的时间范围内发出过多请求,则速率限制解决方案会限制该 IP 地址,并且不会在下一个时间范围内满足其请求。

如果个人用户过于频繁地发出请求,限速应用程序可以告诉他们放慢速度。这好比警察拦下超速司机,或者父母告诉孩子不要在短时间内吃太多糖。

速率限制的类型

管理员可以在设置速率限制时定义不同的参数和方法以及参数。组织选择的速率限制技术取决于目标和所需的限制级别。以下是组织可能实施的三种主要速率限制方法:

  • 用户速率限制——这是最流行的速率限制方法。它通常通过跟踪用户的 IP 地址或 API 密钥来识别给定用户发出的请求数。超过指定速率限制的用户将触发应用程序拒绝任何进一步的请求,直到速率限制时间范围重置。或者,用户可以联系开发人员以提高速率限制。
  • 地理速率限制——开发人员可以通过在指定时间范围内为每个特定区域设置速率限制来进一步保护给定地理区域中的应用程序。例如,开发人员可能会预测给定区域的用户在午夜和上午 9:00 之间的活跃度较低,并为此时间范围定义较低的速率限制。这种方法有助于防止可疑流量并进一步降低攻击风险。
  • 服务器速率限制——开发人员可以在服务器级别设置速率限制,如果他们定义了一个特定的服务器来处理应用程序的某些部分。这种方法提供了更大的灵活性,允许开发人员提高常用服务器的速率限制,同时降低不太活跃的服务器的流量限制。

为什么速率限制很重要?用于速率限制的算法是什么?-南华中天

用于速率限制的算法是什么?

有几种类型的速率限制算法。

固定窗口速率限制

固定窗口速率限制算法限制在给定时间范围(窗口)内允许的请求数。例如,服务器的限速组件可能实施一种算法,每分钟最多接受 200 个 API 请求。有一个从指定时间开始的固定时间范围——服务器在 9:00 到 9:01 之间不会处理超过 200 个请求,但窗口将在 9:01 重置,允许另外 200 个请求直到 9:02。

开发人员可以在服务器或用户级别实现固定窗口算法。在用户级别实施该算法将限制每个用户每分钟 200 个请求。相比之下,服务器级别的算法将限制服务器,这意味着所有用户加起来每分钟最多可以发出 200 个请求。

漏桶限速

漏桶速率限制算法与固定窗口算法不同,因为它们不依赖于指定的时间范围。他们专注于请求队列的固定长度,而没有考虑时间。服务器将按照先到先得的原则为请求提供服务。新请求加入队列的后面。如果新请求在队列已满时到达,服务器将丢弃该请求。

为什么速率限制很重要?用于速率限制的算法是什么?-南华中天

滑动窗口速率限制

滑动窗口速率限制算法与固定窗口算法类似,只是每个时间窗口的起始点不同。使用滑动窗口速率限制,时间范围仅在用户发出新请求时开始,而不是预定时间。例如,如果第一个请求在上午 9:00:24 到达(并且速率限制为每分钟 200 个),则服务器将在 9:01:24 之前允许最多 200 个请求。滑动窗口算法有助于解决固定窗口限速中影响请求的问题。它们还通过提供更大的灵活性来缓解漏桶速率限制所面临的饥饿问题。