ما هي أفضل طريقة لتنفيذ خوارزمية الحد من معدل طلبات الويب؟

StackOverflow https://stackoverflow.com/questions/1450217

سؤال

التكرارات الممكنة / الجزئية:

أنا أبحث عن أفضل طريقة لتنفيذ خوارزمية الحد من معدل النافذة المتحركة لتطبيق ويب لتقليل الرسائل غير المرغوب فيها أو هجمات القوة الغاشمة.

سيكون أمثلة الاستخدام "الحد الأقصى لعدد محاولات تسجيل الدخول الفاشلة من عنوان IP معين في آخر 5 دقائق"، "الحد الأقصى لعدد (المشاركات / الأصوات / وما إلى ذلك ...) في آخر دقيقة N".

أفضل استخدام خوارزمية نافذة الوقت المتحركة، بدلا من إعادة تعيين ثابت للإحصاءات كل X دقائق (مثل Twitter API).

سيكون هذا لتطبيق C # / ASP.NET.

هل كانت مفيدة؟

المحلول

استخدم Hashtable تستند إلى الذاكرة memcached.. وبعد ستكون المفاتيح هي الهدف الذي تقيده (مثل IP) وينبغي أن يكون انتهاء كل قيمة مخزنة هو الحد الأقصى لوقت القيد.

ستتضمن القيم المخزنة لكل مفتاح قائمة متسلسلة من محاولات N الأخيرة التي قدمتها عند أداء الإجراء، إلى جانب الوقت المناسب لكل محاولة.

نصائح أخرى

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

فقط لإضافة إجابة أكثر "حديثة" على هذه المشكلة: ل .NET Webapi، Webapithrottle. ممتاز وربما يفعل كل ما تريد خارج الصندوق.

انها أيضا متوفر على Nuget..

يستغرق التنفيذ دقيقة فقط أو نحو ذلك ويمكن تخصيصه بشكل كبير:

config.MessageHandlers.Add(new ThrottlingHandler()
{
    Policy = new ThrottlePolicy(perSecond: 1, perMinute: 30, perHour: 500, perDay:2000)
    {
        IpThrottling = true,
        ClientThrottling = true,
        EndpointThrottling = true
    },
    Repository = new CacheRepository()
});

تجد هذه الصفحة لتكون قراءة مثيرة للاهتمام:

http://www.codeproject.com/kb/aspnet/10aspnetperformance.aspx.

القسم للبحث عن البدء كما يلي:

منع هجوم الحرمان من الخدمة (DOS)

خدمات الويب هي الهدف الأكثر جاذبية للمتسللين لأن القراصنة قبل المدرسة يمكن أن يؤدي إلى أسفل خادم يدعو خدمة ويب مرارا وتكرارا العمل باهظ الثمن.

تحرير: سؤال مماثل هنا:

أفضل طريقة لتنفيذ طلب الاختناق في ASP.NET MVC؟

أضفت فقط إجابة السؤال كتلة طلبات API لمدة 5 دقائق إذا تجاوز حد معدل API.
انا إستعملت HttpRuntime.Cache للسماح ب 60 طلب فقط في الدقيقة. سوف تتجاوز الحد الأقصى API لمدة 5 دقائق المقبلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top