PHP: लॉगिन सिस्टम के साथ सुरक्षित सदस्य-केवल पेज
प्रदान किए गए कोड के साथ चुनौतियां
प्रदान किया गया PHP कोड कई मुद्दों का सामना करता है जो इसमें बाधा डालते हैं कार्यक्षमता:
- क्वेरी परिणामों की पुनर्प्राप्ति: $data1 = $conn->query($sql1); का उपयोग करने के बजाय, सही दृष्टिकोण $data = mysqli_fetch_array( का उपयोग करना है $conn->क्वेरी($sql1)); या $data = $conn->query($sql1)->fetch_array(); क्वेरी परिणाम लाने के लिए।
- डेटाबेस कनेक्शन और निष्पादन: डेटाबेस से कनेक्शन $total = $data = 0 का उपयोग करके स्थापित किया जाना चाहिए; किसी भी प्रश्न को निष्पादित करने से पहले। )`) एकल उद्धरण के बजाय। sql3)->fetch_array();).
- टोकन जनरेशन: मौजूदा टोकन जेनरेशन विधि सुरक्षित नहीं है क्योंकि यह openingsl_random_pseudo_bytes() का उपयोग करती है। इसके बजाय, कोड को क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर (सीएसपीआरएनजी) जैसे रैंडम_बाइट्स() का उपयोग करना चाहिए।
- प्रस्तावित समाधान
- डेटाबेस संचालन को सरल बनाएं: उपयोगकर्ता की जानकारी प्राप्त करने और क्रेडेंशियल्स की जांच करने के लिए एकल क्वेरी का उपयोग करें। ]: सुरक्षित टोकन जनरेशन के लिए रैंडम_बाइट्स() या समान फ़ंक्शन को नियोजित करें।
सत्र में प्रमाणीकरण डेटा संग्रहीत करें
: प्रमाणीकरण टोकन को कुकी के बजाय एक सत्र चर में सहेजें।
- मान्य टोकन: दिए गए टोकन को मान्य करने के लिए टोकन तालिका के विरुद्ध एक डेटाबेस क्वेरी निष्पादित करें।
- बेहतर कोड
निम्नलिखित संशोधित कोड पहचाने गए मुद्दों को संबोधित करता है और एक अधिक सुरक्षित केवल सदस्य पृष्ठ लॉगिन प्रणाली प्रदान करता है:- connect_error) {
मरो ("कनेक्शन विफल:"। $conn->connect_error);
}
// उपयोगकर्ता प्रमाणीकरण के लिए विवरण तैयार करें
$sql_auth = $conn->तैयार करें ("उन उपयोगकर्ताओं से चुनें * जहां उपयोगकर्ता नाम = ? और पासवर्ड =?");
$sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
$sql_auth->निष्पादित();
$result_auth = $sql_auth->get_result();
// उपयोगकर्ता को प्रमाणित करें
अगर ($result_auth->num_rows > 0) {
$user = $result_auth->fetch_assoc();
$सही = सत्य;
} अन्य {
$सही = असत्य;
}
// टोकन जनरेट करें
यदि ($सही === सत्य) {
$हेक्स = बिन2हेक्स(रैंडम_बाइट्स(3));
$_SESSION['auth'] = $hex;
$_सत्र['लॉगस्टैट'] = सत्य;
}
// कनेक्शन बंद करें
$conn->बंद करें();
?>