ویرگول
ورودثبت نام
Nastooh
Nastooh
Nastooh
Nastooh
خواندن ۶ دقیقه·۱۱ روز پیش

API -Rate Limiting & Throttling

جمع‌بندی سرفصل

Rate Limiting چیست؟

Rate Limiting مکانیزمی برای محدود کردن تعداد Requestهایی است که یک Client یا User می‌تواند در یک بازه زمانی مشخص به API ارسال کند.
هدف اصلی آن محافظت از API در برابر بار زیاد، جلوگیری از Abuse، Brute Force Attack، DoS و مصرف ناعادلانه منابع سیستم است.

مثلاً اگر Contract بگوید:

هر Client حداکثر 100 Request در دقیقه مجاز است.

بعد از درخواست شماره 100، API باید درخواست‌های بعدی را تا پایان بازه زمانی رد کند.


Throttling چیست؟

Throttling مکانیزمی است که سرعت پردازش Requestها را کنترل می‌کند. برخلاف Rate Limiting که معمولاً درخواست اضافی را رد می‌کند، Throttling ممکن است:

  • درخواست را با تأخیر پردازش کند.

  • سرعت پاسخ را کاهش دهد.

  • یا بعد از رسیدن به حد مجاز، درخواست را Reject کند.

بنابراین:

  • Rate Limiting → محدود کردن تعداد Request

  • Throttling → کنترل نرخ یا سرعت پردازش Request


تفاوت Rate Limiting و Throttling
تفاوت Rate Limiting و Throttling


چرا این سرفصل مهم است؟

اگر Rate Limiting وجود نداشته باشد ممکن است:

  • یک Client هزاران Request ارسال کند.

  • منابع Server مصرف شوند.

  • کاربران عادی نتوانند از سرویس استفاده کنند.

  • حملات Brute Force روی Login انجام شود.

  • حملات DoS یا API Abuse رخ دهد.


429 Too Many Requests

مهم‌ترین Status Code این سرفصل است.

اگر تعداد Requestها از حد مجاز بیشتر شود، API معمولاً پاسخ زیر را برمی‌گرداند:

HTTP/1.1 429 Too Many Requests

این Status Code نشان می‌دهد Client باید مدتی صبر کند و سپس دوباره درخواست ارسال کند.


Retry-After Header

معمولاً همراه 429 ارسال می‌شود.

مثال:

Retry-After: 60

یعنی Client باید 60 ثانیه صبر کند.

در تست باید بررسی شود:

  • Header وجود دارد؟

  • مقدار آن صحیح است؟

  • بعد از پایان زمان، API دوباره درخواست را قبول می‌کند؟


روش‌های رایج اعمال Rate Limiting

بر اساس IP Address

هر IP تعداد مشخصی Request مجاز دارد.

مثال:

100 Requests / Minute / IP

بر اساس User

هر کاربر محدودیت جداگانه دارد.

مثلاً:

1000 Requests / Hour / User

بر اساس API Key

هر API Key سهمیه مشخصی دارد.

مثلاً:

5000 Requests / Day / API Key

بر اساس Access Token

در APIهای مبتنی بر OAuth2 معمولاً محدودیت بر اساس Access Token اعمال می‌شود.


الگوریتم‌های رایج Rate Limiting

در آزمون لازم نیست الگوریتم‌ها را عمیق بدانید، اما نام آن‌ها مهم است.

رایج‌ترین الگوریتم‌ها:

  • Fixed Window

  • Sliding Window

  • Sliding Log

  • Token Bucket

  • Leaky Bucket

در سطح آزمون کافی است بدانید:

Token Bucket برای کنترل Burst مناسب است.

Leaky Bucket نرخ خروج Requestها را یکنواخت نگه می‌دارد.


تست Rate Limiting

Backend Tester باید بررسی کند:

  • قبل از رسیدن به Limit همه Requestها موفق باشند.

  • دقیقاً بعد از رسیدن به Limit پاسخ 429 برگردد.

  • Headerهای Rate Limit درست باشند.

  • بعد از پایان بازه زمانی دوباره Request پذیرفته شود.

  • Rate Limit فقط روی Client مربوطه اعمال شود.

  • سایر کاربران تحت تأثیر قرار نگیرند.


Headerهای مهم

بعضی APIها این Headerها را برمی‌گردانند:

X-RateLimit-Limit: 100 X-RateLimit-Remaining: 5 X-RateLimit-Reset: 1710000123

X-RateLimit-Limit

حداکثر تعداد Request مجاز.

X-RateLimit-Remaining

تعداد Request باقی‌مانده.

X-RateLimit-Reset

زمان Reset شدن محدودیت.

در تست باید بررسی شود این مقادیر درست کاهش پیدا می‌کنند.


سناریوهای تست مهم

باید تست شوند:

  • ارسال Request کمتر از Limit

  • ارسال دقیقاً برابر Limit

  • ارسال بیشتر از Limit

  • Reset شدن Limit

  • چند User هم‌زمان

  • چند API Key

  • چند Access Token

  • Retry بعد از Retry-After

  • Parallel Requests

  • Burst Requests


ارتباط با امنیت

Rate Limiting یکی از کنترل‌های مهم امنیتی است.

کاربردها:

  • جلوگیری از Brute Force Login

  • جلوگیری از Credential Stuffing

  • جلوگیری از API Abuse

  • جلوگیری از DoS

  • جلوگیری از مصرف بیش از حد منابع


اهمیت این سرفصل برای Backend Tester

Backend Tester باید بتواند:

  • رفتار API بعد از رسیدن به Limit را بررسی کند.

  • 429 Too Many Requests را تست کند.

  • Headerهای مربوط به Rate Limit را اعتبارسنجی کند.

  • عملکرد Retry-After را بررسی کند.

  • تفاوت Rate Limiting و Throttling را بداند.

  • تست‌های هم‌زمان (Concurrency) و Burst Traffic طراحی کند.

  • بررسی کند Rate Limit روی User، Token، API Key یا IP درست اعمال شده است.


نکته امتحانی مهم

در پاسخ امتحانی فقط نگویید:

Rate Limiting یعنی محدود کردن تعداد Requestها.

پاسخ کامل باید این کلیدواژه‌ها را داشته باشد:

429 Too Many Requests, Retry-After, Burst Traffic, API Abuse, Brute Force, DoS, Concurrency, Rate Limit Headers, IP-based Limiting, User-based Limiting, API Key Limiting, Token Bucket, Leaky Bucket


نمونه پاسخ کامل کوتاه

Rate Limiting مکانیزمی برای محدود کردن تعداد Requestهای مجاز در یک بازه زمانی است تا از API Abuse، Brute Force و مصرف بیش از حد منابع جلوگیری شود. در صورت عبور از حد مجاز، API معمولاً 429 Too Many Requests همراه با Retry-After برمی‌گرداند. Throttling علاوه بر محدودسازی، نرخ پردازش Requestها را نیز کنترل می‌کند و ممکن است به‌جای Reject کردن، درخواست‌ها را با تأخیر پردازش کند. Backend Tester باید رفتار API قبل و بعد از رسیدن به Limit، Headerهای Rate Limit، Reset شدن محدودیت، درخواست‌های هم‌زمان و سناریوهای امنیتی را بررسی کند.


کلیدواژه‌ها

Rate Limiting Throttling 429 Too Many Requests Retry-After Rate Limit Burst Traffic API Abuse Brute Force Credential Stuffing DoS Concurrency Rate Limit Headers X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset Fixed Window Sliding Window Token Bucket Leaky Bucket IP-based Limiting User-based Limiting API Key Limiting Access Token Limiting


Rate Limiting (محدود کردن تعداد Requestهای مجاز در یک بازه زمانی): برای محافظت از API در برابر استفاده بیش از حد، حملات و مصرف ناعادلانه منابع استفاده می‌شود.

Throttling (کنترل سرعت پردازش Requestها): برای کاهش فشار روی سیستم، درخواست‌ها را با تأخیر پردازش یا در صورت نیاز Reject می‌کند.

429 Too Many Requests (کد وضعیت عبور از حد مجاز درخواست): زمانی برمی‌گردد که Client از Rate Limit تعیین‌شده عبور کرده باشد.

Retry-After (Header تعیین‌کننده زمان مجاز برای ارسال مجدد Request): معمولاً همراه پاسخ 429 ارسال می‌شود.

Rate Limit (حداکثر تعداد Request مجاز): مقدار مجاز Requestها در یک بازه زمانی مشخص را تعیین می‌کند.

Burst Traffic (ارسال ناگهانی تعداد زیادی Request): برای بررسی رفتار API در بار لحظه‌ای و تست Throttling استفاده می‌شود.

API Abuse (استفاده غیرمجاز یا بیش از حد از API): یکی از اهداف اصلی پیاده‌سازی Rate Limiting جلوگیری از این رفتار است.

Brute Force (حمله حدس زدن مکرر رمز عبور): Rate Limiting یکی از راهکارهای کاهش این حمله است.

Credential Stuffing (استفاده از نام کاربری و رمزهای افشاشده برای ورود): با محدودسازی تعداد درخواست‌های Login کنترل می‌شود.

DoS (حمله محروم‌سازی از سرویس): با محدود کردن نرخ درخواست‌ها اثر آن کاهش می‌یابد.

Concurrency (ارسال هم‌زمان چند Request): برای بررسی عملکرد صحیح Rate Limiting و جلوگیری از Race Condition تست می‌شود.

Rate Limit Headers (Headerهای نمایش وضعیت سهمیه درخواست): اطلاعات مربوط به Limit، تعداد باقی‌مانده و زمان Reset را به Client می‌دهند.

X-RateLimit-Limit (حداکثر Request مجاز): مقدار کل سهمیه Requestها را نشان می‌دهد.

X-RateLimit-Remaining (تعداد Request باقی‌مانده): تعداد درخواست‌های قابل استفاده تا پایان بازه را نشان می‌دهد.

X-RateLimit-Reset (زمان Reset شدن سهمیه): زمان شروع مجدد سهمیه Requestها را مشخص می‌کند.

Fixed Window (الگوریتم محدودسازی با بازه زمانی ثابت): تعداد Requestها را در بازه‌های زمانی مشخص کنترل می‌کند.

Sliding Window (الگوریتم محدودسازی با پنجره متحرک): نسبت به Fixed Window دقت بیشتری در محاسبه تعداد Requestها دارد.

Token Bucket (الگوریتم مبتنی بر سطل توکن): امکان Burst محدود را فراهم می‌کند و برای کنترل نرخ Request بسیار رایج است.

Leaky Bucket (الگوریتم خروج یکنواخت Requestها): نرخ پردازش Requestها را ثابت نگه می‌دارد.

IP-based Limiting (اعمال Rate Limit بر اساس IP): برای کنترل مصرف هر IP استفاده می‌شود.

User-based Limiting (اعمال Rate Limit بر اساس کاربر): سهمیه Requestها را برای هر User به‌صورت مستقل مدیریت می‌کند.

API Key Limiting (اعمال Rate Limit بر اساس API Key): برای سرویس‌های عمومی و Partner APIها استفاده می‌شود.

Access Token Limiting (اعمال Rate Limit بر اساس Access Token): در APIهای مبتنی بر OAuth2 برای کنترل مصرف هر Token استفاده می‌شود.


تگ‌ها

#APITesting
#RateLimiting
#BackendTesting
#RESTAPI
#SecurityTesting

brute forceapi
۰
۰
Nastooh
Nastooh
شاید از این پست‌ها خوشتان بیاید