2011-12-17 14 views
6

मैंने PHP सत्रों का उपयोग करके एक लॉगिन सिस्टम बनाया है।क्या यह लॉगिन सत्र सुरक्षित है?

यहाँ यह कैसे काम करता है:

1.) जब) में उपयोगकर्ता के लॉग (वैध प्रवेश जानकारी के साथ: उनकी जानकारी (username और password) के कुछ अन्य बिट्स के साथ, एक सत्र में जमा हो जाती है साथ जानकारी: The Expire time: यह वर्तमान समय पर केवल 5 मिनट जोड़े गए हैं (इसलिए यदि उपयोगकर्ता लॉगिन 22:30 बजे समाप्त हो गया है तो समाप्त हो जाएगा 22:35)।

2.) उपयोगकर्ता के प्रत्येक पृष्ठ दृश्य में लॉग इन होने पर: सत्र देखने के लिए चेक किया गया है या नहीं। यदि ऐसा नहीं होता है, तो उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट किया जाता है। यदि सत्र मौजूद है, तो यह expire time की जांच करता है और इसे current time से तुलना करता है। यदि expire time अधिक है तो current time (उपयोगकर्ता 5+ मिनट के लिए निष्क्रिय है) तो उनके उपयोगकर्ता विवरण (सत्र में) चेक किए जाते हैं (डेटाबेस में किसी की तुलना में) और Expiretime सत्र अपडेट किया गया है, लेकिन यदि expire time कम है तो current time, यह किसी भी विवरण की जांच नहीं करेगा, expire time सत्र अपडेट करता है और उपयोगकर्ता को आगे बढ़ने की अनुमति देगा। मैंने बैंडविड्थ को बचाने के लिए डीबी पर निरंतर पूछताछ को रोकने के लिए किया है।

तो मूल रूप से, जब उपयोगकर्ता सफलतापूर्वक लॉग ऑन हो जाता है, तो उनके उपयोगकर्ता नाम और पासवर्ड को तब तक डीबी पर चेक नहीं किया जाएगा जब तक कि वे 5+ मिनट के लिए निष्क्रिय नहीं होते हैं (यदि वे एक पृष्ठ पर रहते हैं) या यदि वे लॉग आउट करते हैं।

कुछ लोग उल्लेख करना भूल गया: समय सीमा समाप्त समय सत्र वास्तव में कहा जाता है expire_time_unique_characters ($_SESSION['expire_time_'.$unique_nu]) जिसका मतलब है कि बुराई व्यक्ति को भी जब सत्र faking $unique_nu खोजने के लिए होगा ...

मैं बस है यह महसूस करता है कि यह बहुत सुरक्षित नहीं है।

इसके अलावा, परियोजना इस बात के लिए है खुला स्रोत (लोगों स्रोत कोड देख सकते हैं) तो यह है कि एक और भी अधिक खतरा बना हुआ है यहाँ है ...

तुम लोग मुझे कुछ प्रतिक्रिया दे सकते हैं?

धन्यवाद

+0

सर्वर पर उपयोगकर्ता/पासवर्ड संयोजन को cleartext में क्यों संग्रहीत करें? सुरक्षा में सुधार करने के लिए _that_ कैसे है? यदि उपयोगकर्ता/पासवर्ड गलत था, सत्र की तुलना में पहले स्थान पर स्थापित नहीं किया गया था, है ना? –

+0

@ निकलास सत्र सफल हो जाने के बाद ही सत्र बनाया जाएगा। –

+0

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

उत्तर

0

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

क्वेरी स्ट्रिंग विधि का उपयोग करने के बजाए कुकी में सत्र आईडी रखें, अन्यथा यूआरएल की प्रतिलिपि बनाने वाले किसी भी व्यक्ति ने अनजाने में अपना सत्र साझा किया और लॉगिन बाईपास कर दिया।

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

+0

यह ध्यान देने योग्य है कि https कुकी स्थिति का समाधान करेगा (हालांकि यह प्रश्न के दायरे से बाहर है, और https में अभी भी समस्याएं होंगी)। – Corbin

+0

मैं इस प्रश्न में कुछ भी उल्लेख करना भूल गया। क्या आप मेरी संपादन को जांच सकते हैं? –

+0

कोई फर्क नहीं पड़ता। '$ _SESSION' तक पहुंच ब्राउज़र द्वारा दी गई' PHPSESSID' (डिफ़ॉल्ट नाम) कुकी द्वारा देखी जाती है। –

2

सत्र में उपयोगकर्ता की आईडी संग्रहीत करना पर्याप्त से अधिक है।

फिर भी, आपको सत्र निर्धारण/अपहरण के खिलाफ किसी प्रकार की सुरक्षा लागू करनी चाहिए।

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