به احتمال قوی شما هم تا به حال با مشکل ارسال تعداد نامحدود درخواست کاربران مواجه شده اید و ممکنه حتی تلاش های زیادی نیز برای رفع این مشکل انجام داده باشید حالا یا موفق شده اید تا حدودی جلوی این کار را بگیرید یا با مشکلاتی مواجه شده اید که کلا بیخیال این قضیه شده اید. در این دوره میخوام پکیجی را به شما معرفی کنم که بسیار قدرتمند و کامل این مشکل را برای شما حل میکند و در عین حال بسیار سبک هم هست پس به هیچ عنوان نگران بار اضافی روی سرور نباشید.
اسم این پکیج AspNetCoreRateLimit هست که میتوانید سورس و کد آن را از این لینک دریافت کنید و مطالعه نمایید. طرز کارAspNetCoreRateLimit بدین صورت است که شما تمامی تنظیمات و قوانین و سیاست های مدنظرتان را در فایل appsetting.json مینویسید و بقیه ی کار را به این میان افزار می سپارید.
و اما چرا باید از این ابزار استفاده کنیم؟
جلوگیری از ارسال تعداد درخواست های زیاد به سرور در سطح نرم افزار
جلوگیری از کاهش سرعت سایت به علت جلوگیری از ارسال درخواست های اضافی
جلوگیری از حمله ی Dictionary Attack (یافتن کلمه عبور با استفاده از فرهنگ لغت و تست های مکرر)
کنترل بیشتر روی درخواست های ارسال شده به سرور
از جمله امکانات بسیار قدرتمندی که میتوان به آن اشاره کرد قابلیت های زیر هستند:
با استفاده از این قابلیت میتوانید برخی از IP ها را نادیده بگیرید و قوانین و سیاست ها را برای آن ها در نظر نگیرید از جمله ی این IP ها میتوان به IP موتورهای جستوجوگر اشاره کرد که اگر آن ها را محدود کنیم ممکن است روی سئوی سایت تاثیر منفی داشته باشد.
شاید برخی از صفحات سایت یا برخی از WebApi ها را بخواهیم نادیده بگیریم و یا حتی آنها را فقط در متدهای خاصی نادیده بگیریم با استفاده ازAspNetCoreRateLimit این کار به راحتی امکان پذیر میباشد.
وقتی تعداد IP های مدنظر در یک Rule خاص زیاد هست و همه ی آنها نیز در یک رنج خاص قرار دارند میتوانید با استفاده از این قابلیت کدها را زیاد شلوغ نکنید و فقط رنج IP را به آن بدهید و بقیه ی کار را بهAspNetCoreRateLimit بسپارید.
شاید قصد داشته باشید که یک صفحه یا WebApi را به صورت کامل در لیست سفید قرار ندهید و فقط قوانین و سیاست های استفاده از آن ها متفاوت باشد با استفاده از این قابلیت میتوانید به راحتی قوانین و سیاست های اختصاصی برای Endpoint های مدنظر درست کنید.
شما میتوانید تعیین کنید که هر کاربر در یک زمان مشخص میتواند چند درخواست به سمت سرور ارسال کند و درصورتی که از حد تعیین شده تجاوز کرد با چه کد وضعیتی رو به رو شود. برای مثال هر کاربر در هر پنج ثانیه فقط میتوانید 15 درخواست به سمت سرور ارسال کند که البته زمان میتواند برحسب دقیقه یا ساعت هم باشد.
ممکن هست که بخوایید که فقط Endpoint هایی که در ادرس آنها شرایط و یا کلمات خاصی هست یکسری قوانین برای آن ها لحاظ شود که میتوانید با استفاده از Regular Expression به مقصود خود برسید.
زمانی که از WebApi استفاده میکنید شاید بخواهید دستگاه هایی که نرم افزارهای شرکت خودتان را میزبانی میکنند از این قوانین مستثنا باشید که به راحتی میتوانید در Header درخواست آن ها شناسه دستگاه را قرار دهید تا AspNetCoreRateLimit بتواند آن دستگاه ها را بشناسد و همچنین آن ها را نادیده بگیرد
شاید به دلایلی بخواهید در زمان اجرای نرم افزار قوانین و سیاست ها را تغییر دهید کهAspNetCoreRateLimit این قابلیت را فراهم آورده و میتواند از آن بهره بگیرد.
اگر منابع محدودی دارید و نمیتوانید برای نگهداری شمارنده ها و اطلاعات کاربران از MemoryCacheاستفاده کنید اینجاست که Redis به کمک شما خواهد آمد و میتوانید از آن برای نگهداری اطلاعات و داده های خود استفاده کنید تا حافظه ی RAM سرور دچار مشکل نشود.
شما به راحتی میتوانید پیغام های سیستم را سفارشی سازی کنید برای مثال آن ها را ترجمه کنید یا تغییر دهید
1
|
![]() |
53 دقیقه
|
|
در بخش مقدمه از آموزش AspNetCoreRateLimit به مباحث زیر خواهیم پرداخت:
AspNetCoreRateLimit چیست؟
چرا باید از AspNetCoreRateLimit استفاده کنیم؟
استفاده از AspNetCoreRateLimit در Razor Page
استفاده از AspNetCoreRateLimit در WebApi
تعیین قوانین عمومی برای Endpoint های خاص
ایجاد لیست سفید برای Ip های خاص
معرفی رنج Ip های موتور جستوجو در لیست سفید
ایجاد لیست سفید برای Endpoint های خاص در حالات مختلف (get, post, ...)
آموزش استفاده از Regular Exression در Endpoint ها
تعیین سیاست برای رنج Ip های اختصاصی
تعیین لیست سفید برای Device های مختلف
و ده ها نکته دیگر در مورد استفاده از AspNetCoreRateLimit