2010-04-21 13 views
19

मेरी वेब एप्लिकेशन सुरक्षा वसंत सुरक्षा 3.02 द्वारा संभाली जाती है लेकिन मुझे ब्रूट फोर्स डिटेक्शन के लिए बॉक्स समर्थन में से कोई भी नहीं मिला।वसंत सुरक्षा: ब्रूट फोर्स डिटेक्शन (बीएफडी) को कैसे कार्यान्वित करें?

मैं कुछ आवेदन स्तर बीएफडी सुरक्षा को लागू करना चाहता हूं। उदाहरण के लिए डेटाबेस में प्रति उपयोगकर्ता असफल लॉगिन प्रयास संग्रहीत करके (जेपीए)। हमला किए गए उपयोगकर्ता खातों को फिर लॉकआउट अवधि या ई-मेल द्वारा मजबूर खाता पुन: सक्रियण प्राप्त हो सकता है।

वसंत सुरक्षा के साथ इसे लागू करने का सबसे अच्छा तरीका क्या है? क्या किसी शरीर के पास उदाहरण कोड या सर्वोत्तम प्रथाएं हैं?

उत्तर

15

अपने स्वयं के बीएफडी रोल करना मुश्किल नहीं है। स्प्रिंग सिक्योरिटी 3.0 में आप बस एप्लिकेशन श्रोताओं को जोड़ सकते हैं (धन्यवाद Stephen C सही दिशा में मुझे इंगित करने के लिए)।

यह श्रोता कॉल किया जाएगा प्रमाणीकरण विफलताएं दिखाई देते हैं:

@Component 
public class AuthenticationFailureListener 
    implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> { 

    @Autowired 
    private UserDao userDao; 

    public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent ev) { 

    String username = ev.getAuthentication().getName(); 

    User user = userDao.find("name", username); 
    if (user != null) { // only for existing users 
      user.reportLoginFailure(); 
      userDao.commit(); 
    } 
    } 
} 

प्रत्येक प्रमाणीकरण विफलता अब उपयोगकर्ता को सूचित करेंगे। उदाहरण के लिए उपयोगकर्ता प्रमाणीकरण विफलता काउंटर को बढ़ाता है और एक निश्चित दहलीज तक पहुंचने पर इसे स्वयं निष्क्रिय कर देता है।

@Component 
public class AuthenticationSuccessEventListener 
    implements ApplicationListener<AuthenticationSuccessEvent>{ 

    @Autowired 
    private UserDao userDao; 

    public void onApplicationEvent(AuthenticationSuccessEvent event) { 

    String username = event.getAuthentication().getName(); 

    User user = userDao.find("name", username); 
    user.reportLoginOK(); 
    userDao.commit(); 
    } 
} 

ऊपर श्रोताओं अतिरिक्त XML विन्यास की जरूरत नहीं होगी और स्वचालित रूप से उठाया जाता है:

एक उपयोगकर्ता सही ढंग से प्रमाणीकृत किया जाता है तो नीचे दिए गए श्रोता उपयोगकर्ता को सूचित करेंगे (उदाहरण के लिए, जो रीसेट कर सकते हैं यह प्रमाणीकरण विफलता काउंटर है) वसंत द्वारा (यदि वे वसंत घटक-स्कैन पैकेज में हैं)।

आपके लेनदेन विन्यास के आधार पर यह समाधान कुछ असफल लॉगिन गणनाओं को याद कर सकता है यदि वे एक साथ निकट होते हैं। यदि आप उपयोगकर्ता को लोड करने के बजाय एक ही अद्यतन क्वेरी के साथ काउंटर को अपडेट करते हैं और फिर परिवर्तनों को सहेजते हैं तो इसे रोका जा सकता है।

ऊपर श्रोताओं को अन्य बीडीएफ पैटर्न का पता लगाने के लिए भी बढ़ाया जा सकता है, उदाहरण के लिए एक एकल आईपी जो बहुत से (यादृच्छिक) उपयोगकर्ता नामों पर स्कैन कर रहा है।

+0

कृपया ध्यान दें कि सभी लॉगिन विधियां प्रमाणीकरण SUccessEvent का उपयोग नहीं करती हैं। आप इंटरएक्टिव प्रमाणीकरण SUccessEvent भी देख सकते हैं। – Florian

+2

अच्छा। धन्यवाद! यदि मैं कर सकता हूं, तो आप हैंडलर के मशीनीवाद का उपयोग क्यों नहीं करते हैं, जैसे प्रमाणीकरणफेलर हैंडलर? मेरा मतलब है, हैंडलर के बजाय श्रोता का उपयोग क्यों करें? कोई पेशेवर/विपक्ष? – OhadR

+2

आपको यह भी पता होना चाहिए कि एक हमला किया गया खाता लॉक करना मतलब है कि आपकी सेवा को डोसबल बनाया जाए। प्रसिद्ध उदाहरण यह है: आप नीलामी सेवा प्रदान करते हैं, बॉब कुछ स्थिति खरीदना चाहता है और ऐलिस के खाते पर हमला करना चाहता है, इसलिए बेटों को बनाने के बजाए ऐलिस अपने खाते को बहाल करने की कोशिश करता है जबकि बॉब को स्थिति मिलती है। यहां तक ​​कि अस्थायी (5 सेकंड) ताले ऐलिस को सेवा की आवश्यकता के रूप में सेवा का उपयोग करने से रोक सकते हैं। – otonglet

4

ब्रूट फोर्स अटैक (पासवर्ड अनुमान लगाने) का पता लगाने का सामान्य तरीका प्रमाणीकरण योजना लॉग लॉग इन प्रयासों में विफल रहा है, और लॉग फ़ाइल में संदिग्ध पैटर्न का पता लगाने के लिए एक अलग अनुप्रयोग प्रयास है। मुझे लगता है कि लूप को बंद करना और डिटेक्टर को हमले के तहत खातों को लॉक करने के लिए कार्रवाई करना संभव होगा, आदि

this page पर एक उदाहरण है।

+0

धन्यवाद! आप लिंक मुझे सही दिशा में इंगित कर रहे हैं। – Kdeveloper

+0

हाय स्टीफन, दुर्भाग्यवश लिंक तोड़ दिया गया है :( – Oleg

9

आपको यह भी पता होना चाहिए कि एक हमला किया गया खाता लॉक करना मतलब है कि आपकी सेवा डोसबल हो।

प्रसिद्ध उदाहरण यह है: आप नीलामी सेवा प्रदान करते हैं, बॉब कुछ स्थिति खरीदना चाहता है और एलिस के खाते पर हमला करना चाहता है, इसलिए बेटों को बनाने के बजाए ऐलिस अपने खाते को बहाल करने की कोशिश करता है जबकि बॉब को स्थिति मिलती है। यहां तक ​​कि अस्थायी (5 सेकंड) ताले ऐलिस को सेवा की आवश्यकता के रूप में सेवा का उपयोग करने से रोक सकते हैं।

+2

मैं ऊपर उठाना चाहता हूं लेकिन यह एक टिप्पणी है, जवाब नहीं। – otonglet

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