2012-08-05 10 views
5

मैं अपने उपयोगकर्ताओं के लिए अपनी वेबसाइट पर लॉग इन करते समय "मुझे लॉग इन रखें" की क्षमता रखने की इच्छा रखूंगा। इस पोस्ट पर शीर्ष उत्तर के सुझाव पर, "Keep Me Logged In" - the best approach, मैंने एक कुकी में उपयोगकर्ता के नमक और पासवर्ड का संयोजन है और उपयोगकर्ता की आईडी (एक संख्या) को दूसरी कुकी में स्टोर करने का निर्णय लिया है। बेशक, हैश वैल्यू डाटाबेस सर्वर-साइड पर भी संग्रहीत किया जाएगा जब उपयोगकर्ता फिर से लौटाएगा। मेरे द्वारा उपयोग किए जाने वाले नमक मूल्य वही है जिसे मैंने उपयोगकर्ता के पासवर्ड को पहले पंजीकृत करते समय पासवर्ड दिया है, इसलिए यह स्थैतिक है - यह सत्रों के बीच नहीं बदलता है। इस दृष्टिकोण के साथ मुझे कुछ समस्याएं दिखाई देती हैं।PHP में संवेदनशील डेटा युक्त कुकीज़ को सुरक्षित रूप से कैसे स्टोर करें?

1) पंजीकरण नमक का उपयोग करना अच्छा विचार है यदि यह स्थैतिक है या क्या मुझे कुकी के लिए हर बार एक अलग नमक उत्पन्न करना चाहिए?

2) अगर किसी को कुकीज़ तक पहुंच प्राप्त होती है और वे उन्हें एक अलग कंप्यूटर पर कॉपी करते हैं, और फिर उस कंप्यूटर से वेबसाइट तक पहुंचने का प्रयास करें, सैद्धांतिक रूप से, यह स्वचालित रूप से उस उपयोगकर्ता के खाते में लॉग इन हो जाएगा, है ना एक सुरक्षा मुद्दा?

3) ऐसे परिदृश्य में जहां दुर्भावनापूर्ण इरादे वाले कुछ उपयोगकर्ता डेटाबेस तक पहुंच प्राप्त कर रहे थे, एक सुरक्षित वेबसाइट नमकीन हो गई थी और हैकर को कई खातों में पहुंच प्राप्त करने के लिए पासवर्ड बनाना मुश्किल था (यदि बिलकुल भी) । लेकिन, केवल हैश और नमक मूल्यों के साथ खेलकर और एक कुकी बनाने से जो डेटाबेस पर बदल गए मूल्यों से मेल खाता है, वे प्रभावी रूप से किसी भी खाते तक पहुंच प्राप्त कर सकते हैं, जो पूरे पासवर्ड-हैशिंग प्रक्रिया को बेकार के रूप में प्रस्तुत कर सकता है। इसलिए, अब मैं जिस कुकी दृष्टिकोण का उपयोग कर रहा हूं वह मेरे पूरे डेटाबेस और मेरे सभी उपयोगकर्ताओं के खातों से समझौता कर रहा है।

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

उत्तर

9

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

कोई सैद्धांतिक रूप से कुकीज़ तक पहुंच हासिल करने और वे एक अलग कंप्यूटर के लिए उन्हें कॉपी, और उसके बाद उस कंप्यूटर से वेबसाइट तक पहुँचने का प्रयास, थे तो वह अपने आप उन्हें उस उपयोगकर्ता के खाते में लॉग इन करेंगे, यह नहीं है एक सुरक्षा मुद्दा?

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

एसएसएल का उपयोग करने के लिए "मुझे याद रखें" कुकी की आवश्यकता के लिए एक और सुविधाजनक समाधान है। इस तरह एक हैकर सादे पाठ संचरण में कुकी कभी नहीं देख पाएगा, और स्थानीय हमले की शायद आवश्यकता होगी। (और यदि ऐसा है, तो मुझे याद रखें कि कुकी शायद उपयोगकर्ता की चिंताओं का सबसे कम है।)

वे प्रभावी रूप से किसी भी खाते तक पहुंच प्राप्त कर सकते हैं, जो पूरे पासवर्ड-हैशिंग प्रक्रिया को बेकार के रूप में प्रस्तुत करता है।

हाँ, और नहीं।यदि आप तकनीक का उपयोग करते हैं (यादृच्छिक आईडी) तो वे केवल उन खातों तक पहुंच सकते हैं जिनके पास "मुझे याद रखें" कुकी है। लेकिन उन्होंने कहा, अगर उनके पास आपके डेटाबेस तक पहुंच है, तो वे किसी भी खाते को बलपूर्वक बल दे सकते हैं। पासवर्ड भी कमजोर होने पर भी नमकीन पासवर्ड स्थानीय रूप से क्रैक करना आसान होता है।

इसके अलावा, आप आधा लॉगिन होने के लिए "मुझे याद रखें" लॉगिन पर विचार कर सकते हैं। कुछ खरीदने के लिए एक्सेस, एक ईमेल पता, आदि बदलें, अभी भी एक पासवर्ड दर्ज करने की आवश्यकता होगी। संदेश बोर्ड पर पोस्टिंग जैसी हानिरहित चीजें करना पासवर्ड के बिना किया जा सकता है।

अंत में, ध्यान दें कि एक PHP सत्र कुकी अस्थायी "मुझे याद रखें" टोकन से अधिक कुछ नहीं है! इसमें से अधिकतर सत्र अपहरण की अवधारणा पर लागू होता है। "मुझे याद रखें" टोकन बस अवसर की एक बड़ी खिड़की जोड़ता है।

तो संक्षेप में: कुकी में संवेदनशील कुछ भी स्टोर न करें, कुकी के लिए एसएसएल की आवश्यकता है, और यदि संभव हो, तो बहु-कारक प्रमाणीकरण लागू करें ... विशेष रूप से व्यवस्थापक खातों के लिए।

+0

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

+0

'uniqid()' जबकि अद्वितीय भविष्यवाणी करना बहुत कठिन नहीं है। मैं बेस 64-एन्कोडेड 'openssl_random_pseudo_bytes() 'जैसे कुछ का उपयोग करता हूं। आपकी चिंताओं वैध हैं, लेकिन फिर से, सैनिटी चेक व्यापक हमलों के खिलाफ सुरक्षा करेगा। उदाहरण के लिए, यदि आपको पुराने खातों में लॉग इन करने वाले कई नए आईपी या एकाधिक खातों में एक आईपी लॉगिंग मिलता है, तो ध्वज उठाएं। – Matthew