java - कैसे जावा वेबएप में लॉगिन attemps थ्रॉटल?




login throttling (5)

मुझे लगता है कि ईएचकैच एक नैपलम बम के साथ एक मक्खी मार रहा है। समस्या सरल है और यह भी कार्यान्वयन है

मैं एक सर्वोलेट फ़िल्टर का उपयोग कर शीर्ष स्तर पर सुझाव देता हूं, जितना संभव हो उतना कम प्रसंस्करण किया जाता है।

निम्नलिखित को स्टोर करने के लिए एक क्लास बनाएं:

  • प्रयासों की संख्या (गिनती)
  • समय

अब, कोड sunchronized ब्लॉक में सरल है:

if userid not in attemptMap:
    attemptMap.add ( userid, new attemptItem ( userid, 1, now ) )
else
    tmp = attemptMap.get ( userid )
    if (acquire lock for tmp) :
      if tmp.time + 30 > now :
          tmp.count = 0
          tmp.time = now
      tmp.count++
      if tmp.count > 3 :
          error=true
      release lock for tmp
    else : error=true

यह उस व्यक्ति को (जब तक कोड सिंक्रनाइज़ किया जाता है)

मैं अपने जावा वेब अनुप्रयोग में लॉगिन एटमेप्स को थ्रॉटल करने के लिए एक सक्षम तंत्र को लागू करना चाहता हूं, ताकि उपयोगकर्ता खातों पर जानवरों के बल के हमले को रोका जा सके।

जेफ ने समझाया, क्यों नहीं, लेकिन कैसे।

साइमन विलिसन ने अजगर के लिए अजगर में एक कार्यान्वयन दिखाया: यह वास्तव में मेरी मदद नहीं करता है क्योंकि मैं मेम्केच और न ही Django का उपयोग नहीं कर सकता

अपने विचारों को खरोंच से जोड़ना एक महान या तो नहीं लगता - मैं पहिया को फिर से बदलने के लिए नहीं चाहता

मुझे एक जावा कार्यान्वयन मिला, हालांकि यह वास्तव में नैतिक लगता है: एलआरयू कैश के बजाय, यह 15 मिनट के बाद सभी प्रविष्टियों को साफ़ करता है।

ईएचकैच memcached के लिए एक विकल्प हो सकता है, लेकिन मेरे पास इसके साथ कोई अनुभव नहीं है और वास्तव में इस तकनीक के लिए बेहतर विकल्प नहीं हैं यदि इस कार्य के लिए बेहतर विकल्प हैं।

तो, जावा में लॉगिन थ्रॉटलिंग को लागू करने का एक अच्छा तरीका क्या है?


मैंने उपयोगकर्ता के विवरण के साथ एक लॉगिन प्रयास गिनती फ़ील्ड का उपयोग किया है जब यह 50 हो जाता है, तो सही पासवर्ड अस्वीकार कर दिया जाता है और उपयोगकर्ता को पासवर्ड रीसेट करना पड़ता है।


लॉग इन अटैम्प्स के बीच समय में एक घातीय वृद्धि के बारे में क्या?


EHCache बहुत अच्छा है, और अधिक महत्वपूर्ण बात यह आपके द्वारा लिखित नहीं है, इसलिए आपको सुविधाओं को फिर से प्रतिपूर्ति करने की आवश्यकता नहीं है और संभवत: उन्हें गलत मिलना है।

मेरा समाधान या तो EHCache या कुछ सरल (यदि यह एक छोटा ऐप था और मुझे वास्तव में संगामिति प्रदर्शन की परवाह नहीं थी) लॉगिन कोड में शामिल होगा।

आप स्टोर करेंगे, प्रति आईपी, असफल संख्या और टाइमस्टैम्प।

  • हर बार जब आप एक लॉगिन प्रयास करते हैं, तो उन्हें असफल गणना और टाइमस्टैम्प का उपयोग करने की अनुमति दी जाती है।
  • हर बार जब आप एक लॉगिन लॉगिन प्रयास करते हैं और असफल हो जाते हैं, तो विफल संख्या 1 से बढ़ी और असफल समय दर्ज करें।
  • हर बार जब आप एक लॉगिन लॉगिन प्रयास करते हैं और उस आईपी के लिए जानकारी को स्पष्ट करने में सफल होते हैं

गलत लॉगिन प्रयास संख्या को बनाए रखें और अगर यह N तक पहुंच जाएगा, तो उपयोगकर्ता को अवरुद्ध करें और जारी रखने के लिए कैप्चा या पासवर्ड रीसेट करें।





throttle