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