2012-03-02 4 views
6

मैं अपनी खुद की प्रमाणीकरण लिपि लिखने की सोच रहा था लेकिन मुझे सुरक्षा के बारे में बहुत कुछ पता नहीं है।PHP में उपयोगकर्ता प्रमाणीकरण के लिए मुझे क्या उपयोग करना चाहिए?

मेरे द्वारा पढ़े गए लेखों से, ऐसा लगता है कि इसमें आम तौर पर नमक के साथ पासवर्ड है और इसे डेटाबेस में संग्रहीत करना शामिल है। फिर जब उपयोगकर्ता लॉग इन करने का अनुरोध करता है, तो पासवर्ड धोया जाता है और डेटाबेस के साथ तुलना की जाती है। यदि यह मेल खाता है, तो उपयोगकर्ता का डेटा $ _SESSION में संग्रहीत किया जाता है।

हालांकि, मुझे नहीं पता कि यह सुरक्षित है या नहीं। मैंने डेटाबेस में सत्र कुंजी संग्रहीत करने के बारे में कुछ पढ़ा लेकिन मुझे यकीन नहीं है कि यह कैसे काम करता है, या इसे कैसे कार्यान्वित किया जाए।

क्या कोई सुरक्षित प्रमाणीकरण को कार्यान्वित करने के बारे में बता सकता है?

इसके अलावा, क्या PHP प्रमाणीकरण पुस्तकालयों के लिए कोई सुझाव है जो मैं शामिल कर सकता हूं जो खुद को लिखने के बजाय सीखना आसान है?

+2

कृपया इस उत्कृष्ट सारांश को पहले पढ़ें: [सुरक्षित हैश और PHP पासवर्ड के लिए नमक] (http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords) –

+1

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

उत्तर

5

this answer here देखें।

हालांकि उत्तर 3 साल पुराना है, सुझाया गया phpass लाइब्रेरी अद्यतित है।

इसके अलावा, एरोन Cederholm के लिए +1। पासवर्ड सुरक्षा एक व्यापक विषय है और आपको पहले से ही StackOverflow पर चर्चा की गई संबंधित प्रश्नों पर पहले देखना चाहिए ताकि आप इस विषय और सुरक्षा में सर्वोत्तम प्रथाओं से अधिक परिचित हों।

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

+0

ज़ेंड वास्तव में एक भयानक औथ मॉड्यूल है जो असुरक्षित उदाहरणों के साथ आता है। – Jacco

5

ध्यान रखने योग्य बातें करने के लिए:

  1. प्रमाणीकरण; उपयोगकर्ता को सत्यापित करना वह है जो वे कहते हैं कि वे हैं।
  2. प्राधिकरण; यह सुनिश्चित करना कि उपयोगकर्ता को वह करने की अनुमति है जो वे कर रहे हैं।
  3. लेखांकन; रिकॉर्डिंग और ऑडिटिंग वे क्या करते हैं।

प्रमाणीकरण के लिए, आपको सिस्टम से जुड़े "उपयोगकर्ताओं" से कनेक्ट होने और (अक्सर) को ट्रैक करने की आवश्यकता होगी। इसके लिए पहचानकर्ता (उपयोगकर्ता नाम, ईमेल, या कुछ अन्य अद्वितीय टोकन) और पास-वाक्यांश जानने की आवश्यकता होती है। उपयोगकर्ता नाम और पास-वाक्यांश कहीं भी स्टोर करें, लेकिन कभी भी को सुरक्षित किए बिना पास-वाक्यांश को संग्रहीत न करें: नमक के साथ संदेश डाइजेस्ट एल्गोरिदम (जैसे एमडी 5 या SHA1) का उपयोग न करें। इसके बजाय bcrypt का उपयोग करें। यद्यपि यहां एक ढांचे का उपयोग करने का बुरा विचार नहीं है, फिर भी सही काम करने के लिए हमेशा ढांचे पर भरोसा न करें।

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

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

आखिरकार, इन सभी तीनों को एक साथ जोड़ना आपके उपयोगकर्ता का सत्र है। जब आप PHP में 'session_start()' को कॉल करते हैं, तो यह क्लाइंट को कुकी के रूप में सत्र पहचानकर्ता भेजता है और उस उपयोगकर्ता के लिए $_SESSION की सामग्री वाले सर्वर की हार्ड ड्राइव पर फ़ाइल संग्रहीत करता है। आप डिफ़ॉल्ट कार्यक्षमता को ओवरराइड करने और session_set_save_handler का उपयोग करके सत्र डेटा सहेजने के लिए PHP को कॉन्फ़िगर भी कर सकते हैं। फिर आप उस जानकारी को डेटाबेस में संग्रहीत कर सकते हैं।

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

1

मैं tank_auth (एक कोडनिर्देशक प्लगइन) का उपयोग करता हूं जो बहुत अच्छा है। स्रोत लॉगिन सुरक्षित लॉगिन को कार्यान्वित करने के लिए एक अच्छा संदर्भ है।

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