تکنولوژی نوین اینترنتی
Rate Limiting یا محدود کردن تعداد درخواستها، یکی از تکنیکهای امنیتی و مدیریتی مهم در توسعه APIها است. این تکنیک به شما این امکان را میدهد که تعداد درخواستهایی که یک کاربر یا کلاینت میتواند به سرور ارسال کند را محدود کنید تا از حملات احتمالی مانند Denial of Service (DoS) یا Brute Force Attacks جلوگیری شود. همچنین، Rate Limiting باعث میشود که منابع سرور به طور بهینه استفاده شوند و بار زیادی روی سرور وارد نگردد.
در لاراول، برای پیادهسازی Rate Limiting از سیستمهای پیشفرض و قدرتمندی مانند Throttle Requests استفاده میشود.
لاراول برای مدیریت Rate Limiting از کلاس ThrottleRequests
استفاده میکند که به شما این امکان را میدهد که تعداد درخواستها را در یک بازه زمانی مشخص محدود کنید. شما میتوانید این محدودیتها را به راحتی برای تمام APIها یا برخی از مسیرها (Routes) پیادهسازی کنید.
لاراول به طور پیشفرض یک سیستم محدودیت نرخ برای تمام درخواستهای API در فایل app/Http/Kernel.php
فراهم کرده است. این تنظیمات در قسمت $routeMiddleware
قرار دارد.
برای محدود کردن تعداد درخواستها، میتوانید از middleware throttle
استفاده کنید:
در اینجا، throttle:60,1
به این معنی است که کاربر میتواند 60 درخواست را در 1 دقیقه ارسال کند. اگر تعداد درخواستها بیشتر از 60 باشد، درخواستهای اضافی رد میشوند.
اگر بخواهید محدودیت نرخ را فقط برای یک گروه از مسیرها اعمال کنید، میتوانید از middleware throttle
به طور مشابه استفاده کنید، اما به صورت گروهی:
در اینجا، تمام درخواستهای داخل این گروه محدود به 30 درخواست در 1 دقیقه خواهند بود.
Kernel.php
برای تنظیم Rate Limiting پیشرفتهتر، میتوانید تنظیمات مربوط به Rate Limiting را در فایل app/Http/Kernel.php
در بخش api
انجام دهید. به طور پیشفرض، لاراول یک محدودیت برای درخواستهای API در این فایل قرار داده است که در مسیر api
اعمال میشود.
در فایل app/Http/Kernel.php
، میتوانید مقدار پیشفرض تعداد درخواستها و زمان محدودیت را تنظیم کنید:
در اینجا، برای تمام درخواستهای API، تعداد درخواستها به 60 درخواست در دقیقه محدود شده است. برای تغییر این مقدار، باید مقدار 'throttle'
را تغییر دهید.
RateLimiter
لاراول به شما این امکان را میدهد که Rate Limiting را به طور سفارشی پیادهسازی کنید. برای انجام این کار، میتوانید از کلاس RateLimiter
استفاده کنید که در Illuminate\Cache\RateLimiter
قرار دارد.
برای پیادهسازی محدودیت سفارشی، ابتدا باید کلاس RateLimiter
را در فایل routes/api.php
یا در فایل app/Providers/RouteServiceProvider.php
استفاده کنید.
مثال پیادهسازی Rate Limiting سفارشی برای مسیرهای خاص:
سپس، این محدودیت را میتوانید برای مسیرهای خاص با استفاده از middleware throttle
به کار ببرید:
در صورتی که بخواهید محدودیت را بهطور داینامیک بر اساس اطلاعات کاربر یا آدرس IP تنظیم کنید، میتوانید از کد زیر استفاده کنید:
در اینجا، تعداد درخواستها به 30 درخواست در دقیقه برای هر آدرس IP محدود میشود.
زمانی که کاربر بیش از حد مجاز درخواست ارسال کند، لاراول بهطور خودکار یک پاسخ با وضعیت 429 (Too Many Requests
) ارسال میکند. شما میتوانید این پاسخها را سفارشیسازی کنید.
برای سفارشیسازی پاسخهای خطا، میتوانید از متد failed
در کلاس ThrottleRequests
استفاده کنید. به عنوان مثال:
اگر از Laravel Passport یا Sanctum برای احراز هویت API استفاده میکنید، میتوانید به راحتی از امکانات Rate Limiting
برای کنترل تعداد درخواستهای کاربران API استفاده کنید. این ابزارها به طور خودکار از محدودیت نرخ برای درخواستها پشتیبانی میکنند.
در Passport، برای هر توکن، تعداد درخواستهای مجاز در یک دوره زمانی مشخص تنظیم میشود. میتوانید این تنظیمات را در مسیرهای API با استفاده از middleware throttle
مشخص کنید.
محدود کردن تعداد درخواستها یا Rate Limiting یکی از روشهای مهم برای حفظ امنیت و عملکرد بهتر APIها است. لاراول ابزارهای پیشفرض و قدرتمندی برای اعمال محدودیت روی درخواستها فراهم کرده است، از جمله middleware throttle
و قابلیتهای RateLimiter
. با استفاده از این ابزارها میتوانید حملات DoS و درخواستهای مخرب را به راحتی مدیریت کنید و منابع سرور را بهینهسازی کنید.
با پیادهسازی Rate Limiting در پروژههای خود میتوانید از بار زیاد روی سرور جلوگیری کرده و تجربه کاربری بهتری فراهم کنید.