2008-12-31 11 views
18

मैं एक PHP- आधारित लॉगिन प्रणाली विकसित कर रहा हूं। प्रत्येक उपयोगकर्ता के पास एक आईडी (एक संख्या) और एक पासवर्ड होता है, जिसे नमकीन हैश के रूप में संग्रहीत किया जाता है।कुकीज़ और नमकीन हैश का उपयोग कर PHP लॉगिन सिस्टम

मैं यह पता लगाने में सक्षम हूं कि कोई लॉगिन सफल है या नहीं, लेकिन अब मुझे उस जानकारी को कहीं और स्टोर करने की आवश्यकता है (ताकि उपयोगकर्ता स्थायी रूप से लॉग आउट न हो)।

अतीत में, मैंने $ _SESSION चर के साथ खेला है। हालांकि, जब उपयोगकर्ता ब्राउज़र छोड़ देता है, तो यह हटाया जाता है, जो अवांछित है। इसके अलावा, मैं "मान लीजिए" कि उपयोगकर्ता सिस्टम को चालित करने की कोशिश नहीं करेगा, इसलिए इसे सुरक्षित होना चाहिए।

तो, यहाँ मेरी प्रश्न हैं:

  1. मैं $_SESSION या $_COOKIE उपयोग करना चाहिए? इन दृष्टिकोणों में से प्रत्येक के मुख्य फायदे क्या हैं?
  2. 'मुझे याद रखें' चेकबॉक्स को कैसे कार्यान्वित करें?
  3. सत्र/कुकी चर में कौन सी जानकारी संग्रहीत की जानी चाहिए?

ध्यान दें कि इस विशेष प्रश्न में कोई डेटाबेस सुरक्षा समस्या नहीं उठाई जा रही है।

नंबर 3 के बारे में

, क्या मैं वास्तव में मतलब है:

  • मैं आईडी और कुकी/सत्र में उपयोगकर्ता के टुकड़ों में बांटा पासवर्ड, या
  • मैं आईडी और गैर की दुकान चाहिए की दुकान चाहिए कुकी/सत्र में उपयोगकर्ता का धराशायी पासवर्ड, या
  • क्या मुझे "सत्र आईडी" और पासवर्ड (हैश या गैर-धोया गया?) या
  • स्टोर करना चाहिए, क्या मुझे "सत्र आईडी", "आईडी" और पासवर्ड (एक बार फिर, धोया या गैर धोया)?

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

अग्रिम धन्यवाद

संपादित करें: Eran 'और संयुक्त ब्रायन की जवाब मैं क्या जरूरत होने लगते हैं। दुर्भाग्यवश, मैं केवल उनमें से एक को स्वीकार्य के रूप में चिह्नित कर सकता हूं। मैं आगे बढ़ने की कोशिश करूंगा और यह देखने के लिए कार्यान्वित करूंगा कि कौन सा अधिक उपयोगी था।

+0

जब भी संभव हो, आपको मौजूदा प्रमाणीकरण ढांचे का फिर से उपयोग करना चाहिए, क्योंकि यह * जटिल * है। उदाहरण के लिए, https://github.com/delight-im/PHP-Auth – caw

उत्तर

9

मैं एरान के बिंदु को दोहराना चाहता हूं कभी उपयोगकर्ता पासवर्ड या सत्र या कुकी डेटा में पासवर्ड का हैश स्टोर नहीं करना चाहता।

सामान्य रूप से मैंने कुकीज़ का उपयोग करके वेब ऐप्स में मुझे कार्यक्षमता याद रखने के लिए लागू किया है। एक "सुरक्षित" निरंतर लॉगिन प्रणाली बनाने के बारे में जानकारी शुरू करने के लिए एक अच्छी जगह यह blog post on the fishbowl है। एक गहन उत्तर पहले ही another Stack Overflow answer में शामिल है।

यदि आपको यह सुनिश्चित करना होगा कि लॉगिन सुरक्षित है तो आपको https का उपयोग करना होगा। ऐसा इसलिए है क्योंकि कुकीज़ या सत्र चोरी हो सकते हैं यदि वे एन्क्रिप्टेड नहीं हैं।

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

+1

पर एक नज़र डालें यह अनुवर्ती लेख अगले स्तर पर ले जाता है: http://jaspan.com/improved_persistent_login_cookie_best_practice – jmucchiello

+0

@jmucchiello 'बेहतर' योजना दुर्भाग्य से म्यूट है। यह भी पढ़ें: http://stackoverflow.com/questions/549/the-definitive-guide-to-website-authentication/477579#477579 – Jacco

8

संवेदनशील जानकारी (यानी, प्रमाणीकरण परिणाम) केवल सत्रों का उपयोग करें। सत्र सर्वर की तरफ संग्रहीत होते हैं और समझौता किए जाने की बहुत कम संभावना होती है।

सत्र जीवनकाल के संबंध में, डिफ़ॉल्ट ब्राउज़र सत्र का जीवनकाल है - लेकिन आप इसे नियंत्रित कर सकते हैं। ऐसी कई सेटिंग्स हैं जो प्रभावित करती हैं:

session.gc_maxlifetime - सत्र के जीवनकाल को प्रभावी ढंग से नियंत्रित करता है।

session.gc_probability और session.gc_divisor एक साथ यह निर्धारित करता है कि सत्र कचरा संग्रह कितनी बार होगा।

और अंतिम सत्र।cookie_lifetime सत्र कुकी के जीवनकाल को नियंत्रित करता है (कुकी जो सत्र आईडी रखती है, इसलिए इसे URL पर tranmistted नहीं किया जाना चाहिए)। यह session.gc_maxlifetime के मान से मेल खाना चाहिए।

साथ ही, सत्र या कुकीज़ (यहां तक ​​कि शेड प्रारूप में भी) में पासवर्ड स्टोर न करें। प्रमाणीकरण के परिणाम।

0

आईडी को $ _SESSION में स्टोर करें लेकिन हैश किए गए या गैर-हैंश किए गए पासवर्ड को स्टोर न करें। एक बार जब उपयोगकर्ता लॉग इन हो जाता है और आईडी $ _SESSION में सहेजी जाती है, तो आपको पासवर्ड की आवश्यकता नहीं होती है।

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