تكنولوجيا

كيفية تصنيف طلبات الحد في Blazor / ASP.Web Core – CloudSavvy IT

إذا كنت تقوم بإنشاء واجهة برمجة تطبيقات عامة أو موقع ويب ، فقد تقلق بشأن الأداء. يساعد تحديد المعدل على منع إساءة استخدام هجمات DDoS الأساسية ويسهل ضبطه لتطبيقات Blazor / ASP.Net Main.

لماذا تريد تحديد طلب السعر؟

هناك العديد من الأسباب للحد من معدل الطلب. من المحتمل أن تضع معظم الخدمات نوعًا من الحد الأقصى للسعر ، لأنه لن يقوم أي شخص عاقل بتقديم 100 طلب في الثانية لمدة 10 دقائق. بشكل افتراضي ، سيستجيب تطبيقك لكل طلب ، لذا فإن وضع حدود معقولة يعد فكرة جيدة.

بالطبع ، قد يتمتع موفر السحابة أيضًا بحماية DDoS. عادة ما يكون هذا دفاعًا جيدًا ضد هجمات الطبقة 3 والطبقة 4 ضد الخادم الخاص بك. ومع ذلك ، لا تزال بحاجة إلى التأكد من أن الخادم الخاص بك يبذل قصارى جهده لمنع المهاجمين من الوصول إليه.

يمكنك أيضًا اختيار تعيين الحد الأدنى للحد من الطلبات لواجهات برمجة التطبيقات العامة. على سبيل المثال ، قد تتطلب نقطة النهاية الكثير من المعالجة للرد على الطلب. قد ترغب في تحديد نقطة النهاية هذه بحيث يقوم عنوان IP واحد بإجراء عدة طلبات كل بضع ثوانٍ ، مما يحد من الضغط على الخادم / قاعدة البيانات.

تعيين حد المعدل في ASP.Internet Main

تم بناء Blazor على ASP.Web Main كإطار عمل ، وهو يعالج كل المحتوى الأساسي لتشغيل خادم HTTP والاستجابة للطلبات. لذلك ، تحتاج إلى تكوين تحديد معدل لـ ASP.Net Core. سيتم تطبيق نفس الخطوات على أي شخص لا يستخدم Blazor.

لسوء الحظ ، لا يعد تحديد المعدل ميزة افتراضية في ASP.Internet Main. ومع ذلك ، هناك حزمة NuGet شائعة جدًا ، AspNetCoreRateLimit، هذا يمكن أن يؤدي المهمة بشكل جيد. يمكنك تثبيته بالنقر بزر الماوس الأيمن على مشروعك في Visual Studio واختيار “إدارة حزم NuGet …”:

البحث عن AspNetCoreRateLimit وتثبيته.

هناك عدة طرق للحد من المعدل. إذا كانت واجهة برمجة التطبيقات التي تستخدمها تتطلب مفتاحًا ، فإننا نوصي بتحديد المعدل بناءً على مفتاح واجهة برمجة التطبيقات ، والذي يغطي جميع المواقف. بالنسبة لمعظم الأشخاص ، قد يكون تحديد المعدل المستند إلى عنوان IP جيدًا ، وهو الإعداد الافتراضي الموصى به من قبل AspNetCoreRateLimit.

تحتاج إلى إضافته إلى ASP.Internet كخدمة.تم تكوين جميع الخدمات بتنسيق Startup.cs، الذي يجمعهم مع ConfigureServices(IServiceCollection expert services) سمات.

هناك العديد من الخدمات التي يجب تكوينها. تقوم الوظيفة الأولى بتهيئة الخدمة لتحميل الإعدادات من ملف التكوين الخاص بك. إذا لم تكن قد قمت بذلك بالفعل ، فستحتاج أيضًا إلى إضافة ذاكرة التخزين المؤقت لـ Microsoft. بعد ذلك ، تحتاج إلى تكوين IpRateLimiting من ملف JSON ، ثم إضافة محدد المعدل.

            // essential to load configuration from appsettings.json 
            products and services.AddOptions()
 
            // essential to shop rate restrict counters and ip procedures
            providers.AddMemoryCache()
 
            //load general configuration from appsettings.json
            services.Configure(Configuration.GetSection("IpRateLimiting"))
 
            // inject counter and regulations shops
            products and services.AddInMemoryRateLimiting()
 
            // configuration (resolvers, counter essential builders)
            companies.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>()

أيضا Startup.cs، تحتاج إلى تكوين منشئ التطبيق لاستخدام تحديد معدل IP.

application.UseIpRateLimiting()

ضع في اعتبارك أن هذا يستخدم حدًا لمعدل الذاكرة في كل حالة. إذا كنت ترغب في تحميل موازنة التطبيق الخاص بك ، فأنت بحاجة إلى استخدام تخزين الذاكرة الموزعة مثل Redis ، والذي تدعمه الحزمة أيضًا.

تكوين حد السعر

بعد إضافته إلى ASP.Internet ، عليك الانتقال إلى appsettings.json ملف التكوين لإعداده. التكوين كما يلي:

"IpRateLimiting": 
    "EnableEndpointRateLimiting": phony,
    "StackBlockedRequests": genuine,
    "RealIpHeader": "X-Actual-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    "EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],
    "ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    "GeneralRules": [
      
        "Endpoint": "*",
        "Period": "1s",
        "Limit": 2
      ,
      
        "Endpoint": "*",
        "Period": "15m",
        "Limit": 100
      ,
      
        "Endpoint": "*",
        "Period": "12h",
        "Limit": 1000
      ,
      
        "Endpoint": "*",
        "Period": "7d",
        "Limit": 10000
      
    ]
  

أولاً ، إذا كنت تخطط لتقدير نقاط نهاية معينة بطرق مختلفة ، فأنت بحاجة إلى تشغيل EnableEndpointRateLimiting ، وهو خطأ افتراضيًا.

ستحسب StackBlockedRequests أي طلبات محظورة في العداد. بشكل أساسي ، بعد إيقاف تشغيل هذه الميزة ، سيتلقى أي شخص يقوم بطلبات متكررة X ردودًا في كل فترة. بعد تمكينه ، سيصلون إلى الحد الأقصى من الاستجابة بسرعة كبيرة ، وبعد ذلك لن يحصلوا على استجابة.

يتم استخدام RealIpHeader و ClientIdHeader عندما يكون الخادم الخاص بك خلف وكيل عكسي. هذا إعداد شائع. نظرًا لأن الطلب سيأتي دائمًا من الخادم الوكيل ، فسيقوم الوكيل بتعيين رأس يحتوي على المعلومات الفعلية عن المستخدم. تحتاج إلى التحقق من الوكيل الخاص بك والتأكد من تعيين هذا العنوان بشكل صحيح ، وإلا فإن محدد المعدل سيعامل الجميع على أنهم نفس عنوان IP.

بعد ذلك ، هناك ثلاث قوائم بيضاء ، واحدة لعنوان IP ومعرف العميل ونقطة النهاية. إذا لم تكن بحاجة إليها ، يمكنك حذفها.

بعد ذلك ، تحتاج إلى تكوين كل نقطة نهاية ، بالإضافة إلى المواعيد النهائية والحدود. ستغطي أحرف البدل كل شيء وهي الوحيدة التي تنطبق على إعداد EnableEndpointRateLimiting إلى wrong.إذا لم يكن كذلك ، يمكنك استخدام نقطة النهاية المحددة HTTP_VERBRoute، بما في ذلك أحرف البدل ، لذلك *:/api/values سيتطابق مع جميع طلبات GET و Article مع /api/values.

تحتاج إلى التأكد من أن نقطة النهاية لديك تطابق ملفًا وليس دليلًا. في حالتي، *:/download/*/* هي نقطة نهاية صالحة ، ولكن *:/obtain/*/*/ لا ، بسبب الشرطة المائلة اللاحقة.

يتضمن هذا التكوين الافتراضي قائمة IP البيضاء للمضيف المحلي ، إذا كنت تختبر ، فأنت بحاجة إلى التعليق عليه. ومع ذلك ، يجب أن تكون قادرًا على اختبار التكوين الخاص بك عن طريق تعيين الحد منخفض جدًا (على سبيل المثال ، 5 في الدقيقة) وإجراء عدد كبير من الطلبات. يجب أن تتلقى رسالة الخطأ هذه “تم تجاوز حصة استدعاء API” ، مما يعني أنها تعمل بشكل صحيح.

يمكن لهذه الحزمة أن تفعل الكثير ، لذلك إذا كانت لديك احتياجات محددة أكثر من ذلك ، فإننا نوصي بالتحقق من وثائقها لمعرفة ما هو ممكن.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى