एक वेबसाइट के लिए "मुझे याद रखें" को लागू करने का सबसे अच्छा तरीका क्या है? [बन्द है]


510

मैं चाहता हूं कि मेरी वेबसाइट में एक चेकबॉक्स हो, जिसे उपयोगकर्ता क्लिक कर सकें ताकि उन्हें मेरी वेबसाइट पर आने के लिए हर बार लॉग इन न करना पड़े। मुझे पता है कि मुझे इसे लागू करने के लिए उनके कंप्यूटर पर एक कुकी स्टोर करने की आवश्यकता होगी, लेकिन उस कुकी में क्या होना चाहिए?

इसके अलावा, इस कुकी को सुरक्षा भेद्यता पेश करने से रोकने के लिए सामान्य गलतियाँ हैं, जिन्हें 'मुझे याद रखें' कार्यक्षमता प्रदान करते समय टाला जा सकता है?


5
Stackoverflow.com/questions/549/… (शीर्ष उत्तर का भाग II) की जाँच करें
Frosty Z

यदि आप ASP.NET का उपयोग कर रहे हैं, तो codeproject.com/Articles/779844/Remember-Me की
Believe2014

1
सिक्योरिटी एसई में कुछ बहुत उपयोगी जानकारी है ~ Security.stackexchange.com/questions/19676/…
b1nary.atr0phy

वर्तमान में चपटे द्वारा स्वीकृत उत्तर अत्यधिक जटिल है। एक यादृच्छिक स्रोत से +16 बाइट टोकन बनाएं, इसे हैश करें, और डेटाबेस में हैश + खाता आईडी सहेजें। फिर HTTPS + httpOnly कुकी में उपयोगकर्ता (base64 एन्कोडेड) को टोकन भेजें (ताकि जावास्क्रिप्ट इसे एक्सेस / चोरी न कर सके)। इस तरह, कोई भी टोकन का अनुमान नहीं लगा सकता है या अमान्य अनुमानों के साथ लोगों को लॉग आउट कर सकता है, फिर भी यदि आपका डेटाबेस हैक किया गया है, तो कोई भी डेटाबेस में टोकन का उपयोग नहीं कर सकता है (वे हैशेड हैं)। तो केवल मूल ग्राहक (या कोई व्यक्ति जो किसी तरह ब्राउज़र स्टोर से टोकन चुराता है) इसका उपयोग कर सकता है।
Xeoncross

जवाबों:


536

बेहतर लगातार लॉगिन कुकी सर्वोत्तम अभ्यास

आप यहाँ बताई गई इस रणनीति का सबसे अच्छा अभ्यास (2006) या यहाँ वर्णित एक अद्यतन रणनीति का उपयोग कर सकते हैं (२०१५):

  1. जब उपयोगकर्ता मी मी मी चेक इन के साथ सफलतापूर्वक लॉग इन करता है, तो मानक सत्र प्रबंधन कुकी के अलावा एक लॉगिन कुकी जारी की जाती है।
  2. लॉगिन कुकी में एक श्रृंखला पहचानकर्ता और एक टोकन होता है । श्रृंखला और टोकन उपयुक्त रूप से बड़े स्थान से असाध्य यादृच्छिक संख्याएँ हैं। दोनों को एक डेटाबेस तालिका में एक साथ संग्रहीत किया जाता है, टोकन हैशेड है (sha256 ठीक है)।
  3. जब कोई गैर-लॉग-इन उपयोगकर्ता साइट पर जाता है और लॉगिन कुकी प्रस्तुत करता है, तो श्रृंखला पहचानकर्ता को डेटाबेस में देखा जाता है
    1. यदि श्रृंखला पहचानकर्ता मौजूद है और टोकन का हैश उस श्रृंखला पहचानकर्ता के लिए हैश से मेल खाता है, तो उपयोगकर्ता को प्रमाणित माना जाता है । एक नया टोकन उत्पन्न होता है, टोकन के लिए एक नया हैश पुराने रिकॉर्ड पर संग्रहीत किया जाता है, और एक नया लॉगिन कुकी उपयोगकर्ता को जारी किया जाता है (यह श्रृंखला पहचानकर्ता का फिर से उपयोग करने के लिए ठीक है )।
    2. यदि श्रृंखला मौजूद है, लेकिन टोकन मेल नहीं खाता है, तो एक चोरी मान ली जाती है। उपयोगकर्ता को जोरदार वर्डेड चेतावनी मिलती है और उपयोगकर्ता के सभी याद किए गए सत्र हटा दिए जाते हैं।
    3. यदि उपयोगकर्ता नाम और श्रृंखला मौजूद नहीं है, तो लॉगिन कुकी को अनदेखा किया जाता है

यह दृष्टिकोण रक्षा-में-गहराई प्रदान करता है। यदि कोई डेटाबेस तालिका को लीक करने का प्रबंधन करता है, तो यह उपयोगकर्ताओं को प्रतिरूपण करने के लिए एक हमलावर को एक खुला दरवाजा नहीं देता है।


20
इसे भी देखें: stackoverflow.com/questions/549/… आपको 'बेहतर' संस्करण नहीं पढ़ना चाहिए
जैको

8
इसके साथ समस्या यह है कि आप कुकी में उपयोगकर्ता नाम उजागर करते हैं, हालांकि यह जीमेल करता है। आपको सीरीज़ आईडी और टोकन दोनों की आवश्यकता क्यों है? एक बड़ा टोकन ठीक नहीं होगा?
डेन रोसेनस्टार्क

10
इसके अलावा, इस मॉडल के बारे में, किसी हमलावर को चोरी करने से रोकने और कुकी को अपने कंप्यूटर पर रखने और हैक किए गए कंप्यूटर से कुकी को हटाने से रोकने के लिए। उनके कंप्यूटर को प्रमाणित किया जाएगा और हैक किए गए कंप्यूटर के साथ आवश्यकतानुसार अपडेट किया जाएगा? एकमात्र बदलाव यह होगा कि हैक किए गए कंप्यूटर उपयोगकर्ता को फिर से लॉगिन करना होगा और मुझे याद रखना होगा। हैक किया गया उपयोगकर्ता पहचानता है या नहीं यह अनिश्चित होगा।

24
@HiroProtagonist श्रृंखला पहचानकर्ता एक DoS हमले को रोकने के लिए है। इसके बिना, मैं आपकी साइट को हर उपयोगकर्ता नाम और एक अमान्य टोकन के साथ जल्दी से लिख सकता हूं, जो आपकी साइट पर सभी को लॉग आउट कर सकता है।
बजे क्रिस मोशचिनी

6
यह समाधान गलत है, यह cuncurrency को हैंडल नहीं करता है: यदि दो याद-मुझे प्रमाणीकरण अनुरोध एक ही समय में आता है, तो एक ही याद-मुझे कुकी के साथ, पहला सफल होता है और टोकन बदल जाता है, दूसरा एक unsucesfull प्रमाणीकरण का कारण बनता है, और एक गलत अलार्म (क्योंकि पहले अनुरोध से टोकन पहले ही बदल दिया गया है)। (यह स्थिति तब हो सकती है जब ब्राउज़र शुरू हो जाता है, और साइट दो ब्राउज़र टैब में बहाल हो जाती है।)
स्लोगन

9

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

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


8

उनके UserId और एक याद रखें स्टोर करें। जब वे मुझे याद करते हुए लॉग इन करते हैं, तो एक नया रिमेम्बरमेक्टेन जेनरेट होता है (जो किसी भी अन्य मशीनों को अमान्य करते हैं जो चिह्नित हैं मुझे याद हैं)।

जब वे मुझे याद टोकन द्वारा उन्हें वापस देखो और सुनिश्चित करें कि UserId मैच।


यह सेकंड में मजबूर किया जा सकता है। मैं अभी अपने user_id को 1 पर सेट करूंगा और सभी टोकन को बल प्रदान करूंगा। यह मुझे सेकंड में पहुँच प्रदान करेगा
एक दोस्त

4

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

निश्चित रूप से इसका कारण यह है कि आपके लगातार सत्र वाले कुकीज़ आसानी से चोरी हो जाते हैं।

आपके कुकीज़ चुराने के 4 तरीके ( पेज पर उनके जवाब के आधार पर जेन्स रोलैंड की एक टिप्पणी से@splattne ):

  1. एक असुरक्षित रेखा (पैकेट सूँघना / सत्र अपहरण) पर इसे रोकना
  2. उपयोगकर्ता के ब्राउज़र को सीधे एक्सेस करके (या तो मैलवेयर या बॉक्स तक भौतिक पहुँच के माध्यम से)
  3. सर्वर डेटाबेस से इसे पढ़कर (शायद SQL इंजेक्शन, लेकिन कुछ भी हो सकता है)
  4. XSS हैक द्वारा (या समान क्लाइंट-साइड शोषण)

104
1. HTTPS को इसे रोकने के लिए बनाया गया है। 2. रहो लॉग इन सुरक्षा समस्या यहाँ नहीं है, आप बड़ी समस्या है। 3. एक ही के रूप में 2. 4. यह अभिगम नियंत्रण नीति और अच्छी इनपुट स्वच्छता द्वारा रोका जा सकता है; यदि आप ये कदम नहीं उठाते हैं, तो आपको फिर से लॉग इन में से बड़ी समस्याएं हैं।
क्रिस मोसचिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.