PHP

2011-09-29 6 views
15

में एक सुरक्षित ऑटो लॉगिन कुकी सिस्टम डिज़ाइन करना मैं उपयोगकर्ता के लिए एक ऑटो लॉगिन विकल्प जांचना चाहता हूं। असल में इसका मतलब है कि एक कुकी क्लाइंट पक्ष पर संग्रहीत की जाएगी।PHP

अब सवाल यह है कि, मैं इसे कैसे सुरक्षित कर सकता हूं ताकि कुकी को धोखा दिया/संशोधित नहीं किया जा सके।

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

मुझे लगता है कि इसके लिए एक अलग टेबल होने से थोड़ा अधिक परेशानी होती है। क्या ऐसा करने का कोई और तरीका है? शायद टोकन या ऐसा कुछ के साथ?

उत्तर

26

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

यदि आप जितना संभव हो सके सुरक्षित होना चाहते हैं तो आपको केवल इस कुकी को https के साथ स्वीकार करना चाहिए। यदि कुकी को http पर स्वीकार किया जाता है, तो इसे स्नीफ और चोरी किया जा सकता है।

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

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

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

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

+0

"जब कोई उपयोगकर्ता आपकी वेबसाइट पर जाता है, तो आप उस कुकी के मूल्य की जांच कर सकते हैं और उपयोगकर्ता को यह प्राप्त कर सकते हैं और उन्हें लॉग इन कर सकते हैं" ऐसा करने का सबसे अच्छा तरीका क्या है? बस उन्हें अपने उपयोगकर्ता/पास डीबी से सुरक्षित पृष्ठ पर रीडायरेक्ट कर रहे हैं? – CodeCrack

+0

@CodeCrack आपके पास पूर्ण नियंत्रण है कि उपयोगकर्ता प्रमाणीकृत है या नहीं, इसलिए वास्तव में कोई अच्छा तरीका नहीं है। बस वही काम करें जो आप अपना उपयोगकर्ता नाम/पासवर्ड दर्ज करने के बाद करेंगे। आपके पास संभवतः 'पूर्ण_login()' नामक एक फ़ंक्शन या कुछ है जिसे सत्र में आवश्यक डेटा है (या बना सकता है)। –

+0

लॉगिन पर पुराने टोकन को नष्ट करने का क्या फायदा है? मुझे लगता है कि उस पल में एक नया ग्राहक भी पास हो जाएगा, है ना? – Uwe

-3

जिस तरह से मैंने पहले किया है, वह पासवर्ड के एमडी 5 हैश को वास्तविक पासवर्ड नहीं भेज रहा है।

सर्वर साइड आप अगर लॉगिन एक कुकी से आ रही है और उसके बाद जाँच लें कि हैश अपने डेटाबेस में पासवर्ड के समान है अगर किसी को हैक करता बाद अपने MD5

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

आप एक्स दिनों के बाद कुकी की समाप्ति करके इसे और अधिक सुरक्षित बना सकते हैं ताकि यदि कुकी चोरी हो जाए तो केवल उस अवधि के लिए पहुंच प्राप्त हो सकती है।

दिन के अंत में सबसे अधिक और केवल? सुरक्षित विधि प्रत्येक बार उपयोगकर्ता लॉगिन को हर बार

+0

पासवर्ड पहले से ही संग्रहीत होने से पहले धोया जाना चाहिए। –

+0

तंदू सही है –

+0

हाँ बिल्कुल प्लस वे पासवर्ड को क्रैश करने के लिए इंद्रधनुष तालिका का उपयोग कर सकते हैं। – CodeCrack

4

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

function gen_uniqueIdent($length=32){ 
    $alphabet = str_split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'); 
    $key = ''; 
    for($loop=0;$loop<$length;$loop++){ 
     $i = mt_rand(0,count($alphabet)-1); 
     $key.= $alphabet[$i]; 
    } 
    return $key; 
} 

लॉगिन पर उपयोगकर्ता कुकी पर यह मान असाइन करें। फिर इसे डीबी में स्टोर करें:

function save_ident($identFromFunctionAbove,$authenticated_user_id){ 
    //hash this with something unique to the user's machine 
    $hashed = md5($identFromFunctionAbove . $_SERVER['REMOTE_ADDR']); 
    /** Some actions to remember this hash **/ 
} 

उपयोगकर्ता_आईडी जैसे उपयोगकर्ता पहचान के साथ डेटाबेस को दूषित करने में सहेजता है।

अब उपयोगकर्ता कुकी के सत्यापन पर, तो आप बस कर सकते हैं:

function validateCookie(){ 
    $ident = $_COOKIE['yourCookieName']; 
    $hashed = md5($ident . $_SERVER['REMOTE_ADDR']); 
    /** Check if this hashed value exists in db, if it does, authenticate user **/ 
} 

तुम भी उनकी समय सीमा समाप्त या उपयोगकर्ता स्पष्ट रूप से लॉग आउट करने के बाद सत्र को दूर करने की आवश्यकता होगी।

बेशक यह बहुत आसान है, और एमडी 5 या पहचान टकराव के लिए जिम्मेदार नहीं है। फिर भी, दो 32-वर्ण यादृच्छिक जेनरेट स्ट्रिंग को पहले से जेनरेट किया गया जैसा ही होना एक मौका है।

+0

एक बार जब उपयोगकर्ता कुकी के साथ लॉग इन करता है, तो क्या मुझे इसे SESSION चर सेट करना होगा यदि मैं इसे किसी चीज़ या बेहतर के लिए उपयोग कर रहा हूं, तो "सत्र" कैसे पुनर्स्थापित किया जाता है? – CodeCrack

+0

@CodeCrack दरअसल, ऊपर वर्णित विधि php में अपना स्वयं का सत्र प्रबंधन विधि बना रही है। तो मूल रूप से, हाँ, आपको इस विधि के साथ PHP सत्रों का उपयोग करने के लिए मैन्युअल रूप से SESSION चर सेट करना होगा। – Jabbany

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

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