2009-04-16 21 views
7

मेरे पास एक मूल प्रमाणीकरण प्रक्रिया है जो Zend_Auth_Adapter_DbTable का उपयोग करती है। मेरे पास मेरे प्रमाणीकरण नियंत्रक पर लॉगिन और लॉगआउट क्रियाएं हैं I अब मैं स्वचालित रूप से पासवर्ड उत्पन्न करके, नया पासवर्ड सहेजकर, और नए जेनरेट किए गए पासवर्ड के साथ एक ईमेल भेजकर भूल गए पासवर्ड रीसेट करने के लिए एक फ़ंक्शन बनाना चाहता हूं।ज़ेंड फ्रेमवर्क में पासवर्ड रीसेट करने के लिए यादृच्छिक पासवर्ड या अस्थायी यूआरएल कैसे उत्पन्न करें?

ऐसा करने के लिए जाने की सबसे अच्छी प्रक्रिया क्या होगी? मुझे एक नया पासवर्ड कैसे उत्पन्न करना चाहिए? क्या ज़ेंड फ्रेमवर्क में कुछ भी है जो इसे आसान बना देगा?

मैंने एक अल्पकालिक पृष्ठ के लिंक के साथ एक ईमेल भेजने के बारे में भी सुना है जो उन्हें एक नया पासवर्ड सेट करने देता है। ज़ेंड फ्रेमवर्क के साथ यह कैसे किया जा सकता है?

उत्तर

22

ज़ेंड फ्रेमवर्क में पासवर्ड-जनरेटिंग क्लास नहीं है। https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/howdoi/?p=118

हालांकि, यह एक अच्छा सुरक्षा अभ्यास एक सादे ईमेल में पासवर्ड भेजने के लिए नहीं है: यहां बताया नाशपाती मॉड्यूल Text_Password उपयोग के लिए पासवर्ड उत्पन्न करने के लिए पर एक लेख है। इसके बजाए, आपको अपना खाता रीसेट करना चाहिए ताकि वे पासवर्ड देने के बिना अस्थायी रूप से लॉग इन कर सकें (एक ईमेल समाप्त करने वाला यूआरएल आपको ईमेल में भेजता है), और एक बार लॉग इन करने के बाद, उन्हें पर पता करने के लिए अपना पासवर्ड अपडेट करने की आवश्यकता होती है। फिर अपने पासवर्ड के नमकीन हैश को स्टोर करें। , reset_id (GUID प्राथमिक कुंजी), account_id (संदर्भ Accounts.account_id के लिए):

  • क्षेत्रों के साथ एक मेज AccountReset परिभाषित करें:


    यहाँ Zend फ्रेमवर्क में ऐसा करने के लिए मेरे सिर के ऊपर से कुछ सुझाव है और expiration (टाइमस्टैम्प)।

  • एक ही नियंत्रक आप खाते बना में प्रवेश करने, पासवर्ड बदलने के लिए उपयोग में एक कार्रवाई AccountController::resetAction() कहा जाता है, यानी लागू, आदि
  • एक उपयोगकर्ता अपने खाते पुनर्स्थापित करने के लिए चुनता है, एक के साथ एक AccountReset तालिका में एक नई पंक्ति सम्मिलित नया GUID, उपयोगकर्ता के खाते का संदर्भ, और भविष्य में expiration 30 मिनट या उससे भी अधिक।
  • उस उपयोगकर्ता के लिए फ़ाइल पर पते पर एक ईमेल भेजें, जिसमें यूआरएल शामिल है, उसे क्लिक करना चाहिए: "https .../account/reset/reset_id/< GUID >" (यदि आप रूटिंग नियमों के साथ चतुर हैं, तो आप उस यूआरएल को छोटा कर सकते हैं, लेकिन इसमें GUID रखें)।
  • जब AccountController::resetAction() अनुरोध प्राप्त करता है, तो यह AccountReset तालिका में reset_id परम देखता है। यदि वह GUID मौजूद है और expiration समय बीत चुका नहीं है, तो उपयोगकर्ता को अपना पासवर्ड बदलने के लिए एक फॉर्म के साथ प्रस्तुत करें (बिना उसे प्रमाणित और लॉग इन किया गया है)।
  • यदि resetAction() कोई GUID के साथ अनुरोध प्राप्त करता है, या GUID डेटाबेस में मौजूद नहीं है, या उस पंक्ति ने expiration पास कर दिया है, तो यह क्रिया उपयोगकर्ता को एक नया रीसेट अनुरोध शुरू करने के लिए बटन के साथ प्रस्तुत कर सकती है, और एक नए GUID के साथ एक ईमेल भेजें। इस बटन को एक पोस्ट अनुरोध करना याद रखें!

क्योंकि GUID को केवल उस उपयोगकर्ता के पते पर ईमेल में सूचित किया जाता है, पासवर्ड बदलने के लिए कोई और भी पहुंच प्राप्त नहीं कर सकता है। यहां तक ​​कि यदि उपयोगकर्ता का ईमेल अवरुद्ध हो जाता है, तो केवल एक सीमित समय है कि GUID उस पहुंच को प्रदान करेगा।

यदि आप और भी सावधान रहना चाहते हैं, तो आप AccountReset तालिका में क्लाइंट आईपी पते पर ध्यान दे सकते हैं, और उस 30 मिनट की विंडो के भीतर एक ही आईपी पते वाले पासवर्ड से पासवर्ड बदलना आवश्यक है।

यह केवल ऑफ-द-कफ है, और मैंने इसे लागू नहीं किया है या उचित सुरक्षा के लिए इसका मूल्यांकन नहीं किया है। यदि आप सुरक्षा लागू करने के लिए ज़िम्मेदार हैं, तो सुरक्षा मुद्दों पर पढ़ना आपका कर्तव्य है। PHP सुरक्षा के लिए एक अच्छी तरह से सम्मानित संसाधन http://phpsecurity.org/ है।

+0

बहुत बढ़िया प्रतिक्रिया! यह बहुत उपयोगी है। धन्यवाद! – Andrew

+0

मेरा एकमात्र अन्य प्रश्न होगा ... क्या मुझे GUID के लिए यादृच्छिक संख्या उत्पन्न करने की आवश्यकता होगी? इस प्रकार मुझे अपने मूल प्रश्न पर वापस लाने के बारे में कैसे जाना है? साथ ही, मुझे यह लागू करने के लिए कैसे जाना चाहिए कि GUID डेटाबेस में अद्वितीय है? – Andrew

+2

uniqid() फ़ंक्शन के साथ PHP में यूयूआईडी उत्पन्न करें: http://php.net/uniqid –

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