速率限制是一種限制網絡流量以防止用戶耗盡系統資源的技術。速率限制使惡意行為者更難使系統負擔過重并導致拒絕服務(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 個請求。滑動窗口算法有助于解決固定窗口限速中影響請求的問題。它們還通過提供更大的靈活性來緩解漏桶速率限制所面臨的饑餓問題。