मेरा PHP प्रमाणीकरण पृष्ठ डीबी से डेटा को सही ढंग से पुनर्प्राप्त नहीं कर रहा है, जब सही प्रमाण-पत्र दर्ज किए जाते हैं तो गलत गूंज दिखाई देता रहता है। कृपया कोई इस पर कुछ प्रकाश डाल सकता है कि मैं कहाँ गलत हो रहा हूँ? बहुत धन्यवाद।

संपादित करें: क्षमा करें, मैं यह उल्लेख करना भूल गया कि यह इंजेक्शन के लिए असुरक्षित माना जाता है क्योंकि मैं इसे एक प्रदर्शन के लिए उपयोग करना चाहता हूं।

एचटीएमएल:

<form method="POST" action="connection.php">
User <br><input type="text" name = "user" size="40"><br>
Password <br><input type ="password" name="pass" size="40"><br>
<input id="button" type="submit" name="submit" value="Log-In">

पीएचपी:

<?php

// Grab User submitted information
$user = $_POST["user"];
$pass = $_POST["pass"];

// Connect to the database
$con = mysqli_connect("localhost","my_user","my_pass");
// Make sure we connected successfully
if(! $con)
{
    die('Connection Failed'.mysqli_error());
}

// Select the database to use
mysqli_select_db(login, $con);

$result = mysqli_query("SELECT usernames, password FROM accounts WHERE usernames = $user");

$row = mysqli_fetch_array($result);


if($row[usernames]==$user && $row[password]==$pass)
    echo"You are a validated user.";
else
    echo"Sorry, your credentials are not valid, Please try again.";

?>

डीबी विवरण:

डेटाबेस का नाम: लॉगिन

तालिका का नाम: खाते

पंक्तियाँ: उपयोगकर्ता नाम
पासवर्ड

0
Chance212 1 जून 2017, 17:31
SQL इंजेक्शन को रोकने के लिए तैयार किए गए कथनों के बारे में जानें
 – 
Jens
1 जून 2017, 17:32
क्या आप क्वेरी के बाद var_dump($result) कर सकते हैं?
 – 
Halcyon
1 जून 2017, 17:33
पासवर्ड को सादा पाठ के रूप में कभी नहीं संगृहीत न करें
 – 
Jens
1 जून 2017, 17:33
1
सादा टेक्स्ट पासवर्ड कभी भी संगृहीत न करें! कृपया PHP के अंतर्निहित कार्यों का उपयोग करें पासवर्ड सुरक्षा को संभालने के लिए। यदि आप 5.5 से कम के PHP संस्करण का उपयोग कर रहे हैं तो आप password_hash() संगतता पैक का उपयोग कर सकते हैं . यह आवश्यक नहीं है कि पासवर्ड से बचें या किसी अन्य सफाई का उपयोग करें हैशिंग से पहले उन पर तंत्र। ऐसा करने से पासवर्ड बदल जाता है और अनावश्यक अतिरिक्त कोडिंग का कारण बनता है।
 – 
Jay Blanchard
1 जून 2017, 17:34
1
"संपादित करें: क्षमा करें, मैं यह उल्लेख करना भूल गया था कि यह इंजेक्शन के प्रति संवेदनशील होना चाहिए क्योंकि मैं इसे एक प्रदर्शन के लिए उपयोग करना चाहता हूं।" अब क्योंकि आपका सिंटैक्स गलत है और इसमें बहुत अधिक त्रुटियां हैं। आप शायद mysql_ का उपयोग कर रहे थे और आपने सोचा था कि आप बस एक i जोड़ देंगे; वैसे यह mysqli_ के साथ उस तरह से काम नहीं करता है। आपको इस php.net/manual/en/book.mysqli पर मैनुअल पढ़ने की जरूरत है। php क्योंकि यह mysql_ api से बिल्कुल अलग है।
 – 
Funk Forty Niner
1 जून 2017, 17:51

1 उत्तर

सबसे बढ़िया उत्तर

आपको अपनी कनेक्शन स्ट्रिंग में डेटाबेस जोड़ने की आवश्यकता है:

$con = mysqli_connect("localhost","my_user","my_pass", "my_db");

आपको mysqli_select_db() की आवश्यकता नहीं है। (जिसे आपने किसी भी तरह गलत तरीके से इस्तेमाल किया।)

दस्तावेज़ों से:

इस फ़ंक्शन का उपयोग केवल कनेक्शन के लिए डिफ़ॉल्ट डेटाबेस को बदलने के लिए किया जाना चाहिए। आप mysqli_connect() में चौथे पैरामीटर के साथ डिफ़ॉल्ट डेटाबेस का चयन कर सकते हैं।

जब आप क्वेरी करते हैं तो आपको स्ट्रिंग्स को उद्धृत करने की आवश्यकता होती है (नीचे चेतावनियां देखें):

"... WHERE usernames = '$user'" // added quotes around $user

आपको अपने पहचानकर्ताओं में उद्धरण जोड़ने होंगे:

if($row[usernames]==$user && $row[password]==$pass) // wrong way

उद्धरणों के साथ

if($row['usernames']==$user && $row['password']==$pass) // right way

यदि आपके पास इन PHP के आसपास उद्धरण नहीं हैं, तो वे उन्हें स्थिरांक मानेंगे और आपके सर्वर के सेटअप के आधार पर उन्हें ठीक से प्रस्तुत नहीं कर सकते हैं।

चेतावनी!

लिटिल बॉबी कहते हैं आपकी स्क्रिप्ट पर SQL इंजेक्शन अटैक का खतरा है। तैयार MySQLi. यहां तक ​​कि स्ट्रिंग से बचना सुरक्षित नहीं है!

सादा पाठ पासवर्ड कभी भी संगृहीत न करें! कृपया PHP के अंतर्निहित कार्यों का उपयोग करें पासवर्ड सुरक्षा को संभालने के लिए। यदि आप 5.5 से कम के PHP संस्करण का उपयोग कर रहे हैं तो आप password_hash() संगतता पैक का उपयोग कर सकते हैं . यह आवश्यक नहीं है कि पासवर्ड से बचें या किसी अन्य सफाई का उपयोग करें हैशिंग से पहले उन पर तंत्र। ऐसा करने से पासवर्ड बदल जाता है और अनावश्यक अतिरिक्त कोडिंग का कारण बनता है।

1
Jay Blanchard 1 जून 2017, 17:48
Mysqli_connect() में db नाम जोड़ना आवश्यक नहीं है क्योंकि OP डेटाबेस का चयन करने के लिए mysqli_select_db() का उपयोग करता है, लेकिन OP के पैरामीटर गलत क्रम में हैं।
 – 
Tom Udding
1 जून 2017, 17:42
यह सही नहीं है @TomUding, कृपया mysqli_select_db() के लिए दस्तावेज़ पढ़ें जो मैंने यहां उद्धृत किए हैं।
 – 
Jay Blanchard
1 जून 2017, 17:43
मैं देखता हूं, मैंने सोचा था कि इसका मतलब यह है कि आप इसे पहले स्थान पर एक डीबी का चयन करने के लिए उपयोग कर सकते हैं, जरूरी नहीं कि _कनेक्ट में निर्दिष्ट एक को बदलने के लिए, लेकिन ओपी ने अभी भी पैरामीटर को उलट दिया है (यदि कभी आवश्यकता हो तो यह काम नहीं करेगा)।
 – 
Tom Udding
1 जून 2017, 17:47
1
ट्रू डेट @TomUding
 – 
Jay Blanchard
1 जून 2017, 17:47