تکنولوژی نوین اینترنتی
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 در پروژههای خود میتوانید از بار زیاد روی سرور جلوگیری کرده و تجربه کاربری بهتری فراهم کنید.