2010-04-07 15 views
22

कभी-कभी, मैं कुछ वेब विकास ढांचे में आ जाता हूं जो प्रमाणीकरण एएसपी.NET में प्रमाणीकरण सुविधा प्रदान नहीं करते हैं।सुरक्षित "मुझे याद रखें" लागू करने के लिए सर्वोत्तम अभ्यास

मैं सोच रहा था कि हाथ याद करने के द्वारा "मुझे याद रखें" लॉगिन सुविधाओं को लागू करते समय सुरक्षा उपायों पर विचार करने की आवश्यकता है?

  1. स्टोर कुकी में उपयोगकर्ता नाम:

    यहाँ बातें मैं आमतौर पर कर रहे हैं। उपयोगकर्ता नाम एन्क्रिप्ट नहीं किया गया है।

  2. कुकी में एक गुप्त कुंजी स्टोर करें। गुप्त कुंजी उपयोगकर्ता नाम के आधार पर एक तरफ फ़ंक्शन का उपयोग करके उत्पन्न होती है। यह सुनिश्चित करने के लिए कि उपयोगकर्ता का नाम बदला नहीं जा रहा है, सर्वर उपयोगकर्ता नाम के खिलाफ गुप्त कुंजी सत्यापित करेगा।

  3. कुकी में केवल एचटीपी का उपयोग करें। http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

और कुछ भी जो मुझे याद आया है, जो संभवतः सुरक्षा छेद का नेतृत्व कर सकता है?

उत्तर

17

कुकी हमेशा एक यादृच्छिक मूल्य होना चाहिए जो समाप्त हो जाती है। ऐसे मामले हैं जहां आप एक कुकी मूल्य के रूप में राज्य को स्टोर कर सकते हैं और यह एक सुरक्षित खतरे नहीं है, जैसे उपयोगकर्ता पसंदीदा भाषा, लेकिन इसे जितना संभव हो से बचा जाना चाहिए। HttpOnlyCookies चालू करना, एक अच्छा विचार है।

ए 3 पढ़ें: OWASP top 10 for 2010 में "टूटा प्रमाणीकरण और सत्र प्रबंधन"। इस खंड में एक महत्वपूर्ण बिंदु यह है कि https पूरे सत्र के लिए उपयोग किया जाना चाहिए। यदि सत्र बहुत लंबे समय तक चल रहा है, तो यह और भी महत्वपूर्ण है।

यह भी ध्यान रखें कि "मुझे याद रखें" एक बड़ी खिड़की बनाता है जिसमें एक हमलावर सत्र पर "सवारी" कर सकता है। यह हमलावर को बहुत लंबा समय देता है (महीनों?) जिसमें वह एक सीएसआरएफ हमला कर सकता है। यहां तक ​​कि यदि आपके पास सीएसआरएफ सुरक्षा है तो भी हमलावर XSS और XmlHttpRequest (HttpOnlyCookies एक पूर्ण अपहरण को रोक देगा) के साथ एक सत्र पर सवारी कर सकता है। "मुझे याद रखें" xss, csrf जैसे अन्य खतरों को और अधिक गंभीर बनाता है। जब तक इन भेद्यता को संबोधित किया गया है, तब तक आपको असली दुनिया हैकर्स के साथ कोई समस्या नहीं होनी चाहिए।

सबसे आसान (और सुरक्षित) दृष्टिकोण को लागू करने के लिए एक "मुझे याद रखें" सुविधा सत्र टाइमआउट अपने web.config फ़ाइल को संशोधित करने के लिए होगा:

<configuration> 
     <system.web> 
      <sessionState timeout="60"/> 
      </sessionState> 
     </system.web> 
    </configuration> 

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

यदि सत्र समाप्त नहीं होता है तो बल को बल देना बहुत आसान होगा। ये मान बड़े हैं, लेकिन एक हैकर को सत्र आईडी अनुमान लगाने का प्रयास करने में वर्षों का खर्च करने की अनुमति देना एक भेद्यता है।

+3

ग्रेट उत्तर। एकमात्र चीज जो मैं जोड़ूंगा वह एक्सएसएस और सीएसआरएफ को रोकने के लिए सावधानी बरतती है। यदि आपके पास दीर्घकालिक सत्र हैं तो ये दोनों मुद्दे महत्वपूर्ण हो जाते हैं। –

+0

@ श्रीम मैं पूरी तरह से आपसे सहमत हूं। (+1) – rook

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