2011-01-27 25 views
12

मैंने प्रत्येक विफल लॉगिन प्रयास को लॉग इन करने के लिए अपना डीबी सेट अप किया है। मैंने सोचा कि मैं 0.05 सेकंड या कुछ के साथ असफल प्रयासों की संख्या गुणा करूंगा। कुछ ऐसा:ब्रूटफोर्सिंग रोकने के लिए लॉगिन के लिए बढ़ती समय देरी, अच्छा विचार?

  time_nanosleep(0, (50000000 * $failed_attempts)); 

पासवर्ड का अनुमान लगाने के लिए हैकर का उपयोग अधिक प्रयास करता है, हर बार जांचने में अधिक समय लगता है। 100 पासड़ों की जांच करने के बाद उसे प्रत्येक प्रयास के बीच 5 सेकंड का इंतजार करना होगा।

क्या यह ब्रूटफोर्सिंग रोकने का एक अच्छा तरीका है? मैं आईपी द्वारा उपयोगकर्ताओं की पहचान करता हूं। तो मुझे लगता है कि आप एकाधिक प्रॉक्सी सर्वर या कुछ का उपयोग करके एप्लिकेशन को ब्रूटफोर्स कर सकते हैं, लेकिन इसके अलावा, मुझे लगता है कि यह एक अच्छा विचार है। आप लोग क्या सोचते हैं?

उत्तर

9

क्या की तरह कुछ के बारे में:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10))); 

यह आपको एक तीव्र गति से बढ़ती प्रयास खिड़की दे देंगे।

+0

हाँ, यह बहुत बेहतर है। – ganjan

1

यह ब्रूटफोर्सिंग के खिलाफ आपकी पूरी रणनीति नहीं होनी चाहिए, लेकिन यह उस रणनीति के लिए एक उत्कृष्ट घटक है और आईएमओ का हमेशा उपयोग किया जाना चाहिए।

+0

यह निश्चित है कि निश्चित एक के बजाय यादृच्छिक देरी हो। – akond

+0

मुझे बहुत लाभ नहीं दिख रहा है - क्या हो रहा है क्रैकर के लिए स्पष्ट होने जा रहा है क्योंकि औसत देरी बढ़ जाती है, परवाह किए बिना - लेकिन मुझे कोई नुकसान नहीं दिखता है, अगर यह आपको अपील करता है। – chaos

+0

@akond यादृच्छिक देरी क्यों अच्छा है? – ChrisW

6

पहला मुद्दा जो मैं देखता हूं वह यह है कि आप एक बॉट से निपट रहे हैं जो प्रतिक्रियाओं के बीच देरी होने पर परवाह नहीं करता है। जब तक आप इसे सीमित करने के लिए कुछ नहीं करते हैं, तो आप संभावित रूप से बहुत लंबी देरी के साथ सिस्टम संसाधनों का उपयोग कर रहे हैं। 5 विफल प्रयासों के बाद बस आईपी पर प्रतिबंध लगाएं। यदि आप वास्तविक उपयोगकर्ता पर प्रतिबंध लगाने के बारे में चिंतित हैं तो यह एक अस्थायी प्रतिबंध हो सकता है।

+0

नींद दृष्टिकोण के बारे में अंतर्दृष्टिपूर्ण अवलोकन सिस्टम संसाधनों को बांधने के खिलाफ सुरक्षा प्रदान नहीं कर रहा है। कई विफल प्रयासों के बाद –

+0

प्रतिबंध। मैं इसे भी जोड़ दूंगा। – ganjan

+3

मुझे यकीन नहीं है कि वास्तव में Friar क्या दिमाग में है, लेकिन यह मुझे एक दिलचस्प विचार की ओर ले जाता है। नींद करने के बजाए, उपयोगकर्ता को समय की तेजी से बढ़ती अवधि के लिए क्यों नकारें? यही है, एक विफलता के बाद, उस आईपी से आगे के लॉगिन प्रयासों का कहना है कि 1 सेकंड अस्वीकार कर दिया गया है। अगली विफलता 2 सेकंड। इत्यादि। एक ऐसे मानव उपयोगकर्ता के लिए जिसने पासवर्ड गलत टाइप किया है, वह शायद यह भी ध्यान नहीं देगा: उसे अपना पासवर्ड और रीट टाइप करने के लिए कुछ सेकंड से अधिक समय लगेगा। लेकिन बॉट के लिए, उसे विफलता मिल जाएगी कि वह शायद नहीं जानता कि व्याख्या कैसे करें। – Jay

1

आप शायद उस समय केवल रैखिक रूप से बढ़ाना चाहते हैं; या इसे ठीक कर दें, उदा। 5 विफल प्रयासों के बाद एक घंटे के लिए मना कर दिया।

4

सीमा आईपी द्वारा पुनः प्रयास करें और कैप्चा का उपयोग करें। अपने सर्वर को अधिभारित न करें, KISS सोचें।

+1

हाँ, reCaptcha या कुछ का उपयोग करें, आप एक्स विफल प्रयासों के बाद इसे प्रकट कर सकते हैं। – Phoenix

+0

मैं कैप्चा का उपयोग करना पसंद नहीं करता, विशेष रूप से reCaptcha। डिजाइन के लिए बुरा, उपयोगकर्ता मित्रता के लिए बुरा .. – ganjan

0

मुझे पता है मैंने इसे कहीं कहीं देखा है, हालांकि मैं कहां भूल जाता हूं। उदाहरण मैंने देखा, उन्होंने प्रत्येक असफल प्रयास के साथ समय विलंब को दोगुना कर दिया। यदि आपने शुरू किया है, तो कहें, 1 सेकंड, एक सामान्य उपयोगकर्ता जो एक बार या दो बार अपना पासवर्ड गलत टाइप कर सकता है। 4 सेकंड की देरी हो जाती है। वे भी ध्यान नहीं देंगे। लेकिन कोई भी जो क्रूर बल पर हमला करता है वह जल्द ही मिनटों या घंटों में देरी पाने जा रहा है।

मुझे लगता है कि एक वेब ऐप के लिए स्वयं पर एक इनकार सेवा-सेवा हमला शुरू करने का मुद्दा हो सकता है। यह सब इस बात पर निर्भर करता है कि सिस्टम समय देरी कैसे संभालता है।

0

बॉट्स वास्तव में आपकी देरी के बारे में परवाह नहीं करते हैं, भले ही यह घातीय या लॉगरिदमिक या कुछ भी हो। आपके द्वारा उपयोग की जाने वाली किसी भी देरी को मतदान द्वारा दूर किया जा सकता है। तो, देरी मत सोचो। प्रयासों की संख्या सीमित करने और Google reCAPTCHA का उपयोग करने के बारे में सोचें। यह सार्वजनिक-निजी कुंजी एन्क्रिप्शन का उपयोग करता है। अधिकांश बॉट को खत्म करने के लिए काम करता है और क्रैक करना कठिन होता है।

4

आपको नींद() का उपयोग न करने की कोशिश करनी चाहिए क्योंकि यह सीपीयू चक्र का उपयोग करती है, और यदि आपके पास 10,000 आईपी पते से ब्रूट फोर्स आक्रमण है तो आप 10,000 नींद() बच्चे की प्रक्रिया या धागे को फोर्क करेंगे, इससे आपके सर्वर पर लोड होगा ।

इसके बजाय PHP का उपयोग करके आईपी पते को अवरुद्ध करने का प्रयास करें। कुछ इस तरह।

function block_ip($ip) { 
     $deny = array("$ip"); 
       if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) { 
        header("HTTP/1.1 403 Forbidden"); 
        exit(); 
       } 
      }