2008-08-20 17 views
6

मेरे पास एक PHP स्क्रिप्ट है जो एक CGI प्रोग्राम के रूप में चलती है और HTTP Authenticate हेडर खाया जाता है और थूक जाता है। इसलिए मैं किसी प्रकार का फॉर्म आधारित प्रमाणीकरण लागू करना चाहता हूं। एक अतिरिक्त बाधा के रूप में, कोई डेटाबेस नहीं है इसलिए कोई सत्र डेटा संग्रहीत नहीं किया जा सकता है।बैकिंग डेटाबेस के बिना आप FORM आधारित प्रमाणीकरण को कैसे कार्यान्वित करेंगे?

मैं मास्टर उपयोगकर्ता नाम और पासवर्ड रखने के लिए बहुत खुला हूं। मुझे केवल एक घुसपैठिए से आवेदन की रक्षा करने की आवश्यकता है जो इन प्रमाण-पत्रों को नहीं जानता है।

तो आप इसे कैसे कार्यान्वित करेंगे?

कुकीज़?

मैं फॉर्म प्रस्तुत कर सकता हूं और यदि यह मान्य करता है, तो मैं एक कुकी वापस भेज सकता हूं जो आईपी पते का हैश गुप्त कोड आती है। तब मैं पृष्ठों को प्रतिपादन से रोक सकता हूं जब तक कि चीज सही तरीके से डिक्रिप्ट न हो। लेकिन मुझे नहीं पता कि PHP में इसे कैसे कार्यान्वित किया जाए।

+0

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

उत्तर

5

कुछ तरीके आप इसे कर सकते हैं।

  1. htaccess - अपने वेबसर्वर हैंडल को प्रश्न में पृष्ठों को सुरक्षित करना है (हालांकि वास्तव में सीजीआई फॉर्म नहीं है)।
  2. कुकीज़ का उपयोग करें और कुछ प्रकार के हैशिंग एल्गोरिदम (md5 पर्याप्त है) पासवर्ड को एक फ्लैट फ़ाइल में संग्रहीत करने के लिए जहां फ़ाइल में प्रत्येक पंक्ति उपयोगकर्ता नाम है: passwordhash। salt अतिरिक्त सुरक्षा बनाम इंद्रधनुष तालिकाओं के लिए अपने हैंश सुनिश्चित करें। (यह विधि थोड़ा सा बेवकूफ है ... बहुत सुरक्षा के साथ सावधान रहें यदि आप इस मार्ग पर जाते हैं)
  3. प्रमाणीकरण को संभालने के लिए sqlite डेटाबेस जैसे कुछ का उपयोग करें। स्क्लाइट कॉम्पैक्ट और सरल है कि यह अभी भी आपकी आवश्यकताओं को पूरा कर सकता है भले ही आप एक बड़ा डीबी बैकएंड नहीं चाहते हैं।

सैद्धांतिक रूप से, आप एक फ्लैट फ़ाइल में सत्र डेटा भी संग्रहीत कर सकते हैं, भले ही आपके पास डेटाबेस न हो।

-1

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

1

यदि आप वर्तमान में प्रमाणीकरण का उपयोग कर रहे हैं, तो आपके पास पहले से ही htpasswd फ़ाइल हो सकती है। यदि आप उस फ़ाइल का उपयोग करना जारी रखना चाहते हैं, लेकिन प्रमाणीकरण शीर्षलेख के बजाय FORM आधारित प्रमाणीकरण का उपयोग करने के लिए स्विच करें, तो आप एक ही htpasswd फ़ाइल का उपयोग करने के लिए एक PHP स्क्रिप्ट का उपयोग कर सकते हैं और प्रमाणीकरण स्थिति को बनाए रखने के लिए सत्रों का उपयोग कर सकते हैं।

php htpasswd के लिए एक त्वरित Google खोज this page को एक PHP फ़ंक्शन के साथ एक htpasswd के विरुद्ध प्रमाण-पत्र जांचने के लिए प्रकट करता है। आप इस तरह के कुछ कोड के साथ इसे एकीकृत कर सकते हैं (मान लें कि आपके पास ऑटोस्टार्ट पर सत्र सेट हैं):

// At the top of your 'private' page(s): 
if($_SESSION['authenticated'] !== TRUE) { 
    header('Location: /login.php'); 
    die(); 
} 

// the target of the POST form from login.php 
if(http_authenticate($_POST['username'], $_POST['password'])) 
    $_SESSION['authenticated'] = TRUE; 
1

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

यदि वेब सर्वर आपके लिए एक्सेस नियंत्रण का ख्याल रखता है तो क्या आपको वास्तव में प्राधिकरण शीर्षलेख देखने की आवश्यकता है?

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

गुड लक, :)