2009-09-20 14 views
24

संभव/आंशिक डुप्लिकेट:वेब अनुरोधों के लिए रेट-सीमित एल्गोरिदम लागू करने का सबसे अच्छा तरीका क्या है?

मैं एक वेब अनुप्रयोग को कम करने के लिए एल्गोरिथ्म सीमित एक चलायमान समय खिड़की दर लागू करने के लिए सबसे अच्छा तरीका है के लिए देख रहा हूँ स्पैम या ब्रूट फोर्स हमले।

उपयोग के उदाहरण पिछले 5 मिनट में दिए गए आईपी से असफल लॉगिन प्रयासों की अधिकतम संख्या "," अंतिम एन मिनट में अधिकतम संख्या (पोस्ट/वोट/आदि ...) "होंगे।

मैं प्रत्येक एक्स मिनट (जैसे ट्विटर एपीआई) के आंकड़ों की हार्ड रीसेट की बजाय एक चलती समय विंडो एल्गोरिदम का उपयोग करना पसंद करूंगा।

यह एक सी #/एएसपी.Net ऐप के लिए होगा।

+0

मुझे नहीं लगता कि आपूर्ति किए गए डुप्लिकेट में से कोई भी वास्तव में इस सवाल का जवाब asp.net/c# slant के साथ देता है। – spender

+0

@ स्पेंडर: इसलिए वह शब्द "संभव" ;-) – Argalatyr

+0

वास्तव में मूल प्रश्न सामग्री के बजाय "करीबी" मतदाता पर निर्देशित किया गया था। – spender

उत्तर

10

memcached जैसे तेज मेमोरी-आधारित हैशटेबल का उपयोग करें। चाबियां वह लक्ष्य होंगी जो आप सीमित कर रहे हैं (उदा। आईपी) और प्रत्येक संग्रहीत मूल्य की समाप्ति अधिकतम सीमा समय होनी चाहिए।

प्रत्येक कुंजी के लिए संग्रहीत मानों में प्रत्येक प्रयास के समय के साथ कार्रवाई करने में किए गए अंतिम एन प्रयासों की एक क्रमबद्ध सूची होगी। इस प्रकार

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

खंड शुरू होता है के लिए बाहर देखने के लिए:

+2

तो प्रत्येक प्रयास के लिए, मैं कैश की गई सूची को deserialize, समय खिड़की के बाहर प्रविष्टियों को काट, नई प्रविष्टि जोड़ें, आइटम गिनती, और कैश अद्यतन? – Lamar

+0

@ लामर आप मेमकैड के बजाय रेडिस का उपयोग कर सकते हैं। रेडिस ने सूचियों के लिए समर्थन में बनाया है और पहले और आखिरी बार - मुझे लगता है कि रेडिस के साथ आपको पूरी सूची को deserialize करने की आवश्यकता नहीं होगी। "रेडिस रेट सीमित" के लिए Google – KajMagnus

+0

@ काजमैग्नस रेडिस निश्चित रूप से इसके लिए सही समाधान है। सूचियों के लिए समर्थन और काम को सीमित करने के लिए इसे लागू करने के लिए इसे लागू करना। – Lamar

23

हमें पता चला कि Token Bucket इस प्रकार की दर-सीमा के लिए बेहतर एल्गोरिदम है। यह व्यापक रूप से राउटर/स्विच में उपयोग किया जाता है ताकि हमारे ऑपरेशन लोग इस अवधारणा से अधिक परिचित हों।

2

आप एक दिलचस्प पढ़ने के लिए इस पेज को खोजने के

सेवा की रोकें डेनियल (डीओएस) हमला

वेब सेवाएं हैकर्स के लिए सबसे आकर्षक लक्ष्य हैं क्योंकि यहां तक ​​कि एक प्री-स्कूल हैकर भी सेवा दे सकता है बार-बार एक वेब सेवा बुलाकर जो महंगा काम करता है।

संपादित करें: यहाँ इसी प्रकार के प्रश्न:

Best way to implement request throttling in ASP.NET MVC?

5

बस इस समस्या के लिए एक और अधिक 'आधुनिक' जवाब जोड़ने के लिए: .NET वेबएपीआई के लिए, WebApiThrottle उत्कृष्ट है और शायद सब कुछ आप से बाहर चाहते हैं करता है डिब्बा।

यह भी available on 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() 
}); 
0

मैं सिर्फ सवाल Block API requests for 5 mins if API rate limit exceeds.
मैं HttpRuntime.Cache इस्तेमाल किया प्रति मिनट केवल 60 अनुरोधों अनुमति देने के लिए का जवाब गयी। सीमा से अधिक अगले 5 मिनट के लिए एपीआई ब्लॉक करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे