आपके कोड में बहुत सी चीजें गलत हैं और आपके पास अभी जो है उसे ठीक करके समाधान प्रदान करना बेहद मुश्किल होगा।
सबसे पहले, MD5 को अब पासवर्ड संग्रहण के लिए उपयोग करने के लिए सुरक्षित नहीं माना जाता है।
परामर्श करें:
- https://security.stackexchange.com/questions/ 19906/is-md5-considered-insecure
- https://en.wikipedia.org/wiki/MD5
साथ ही, आप तैयार किए गए कथनों का सही उपयोग नहीं कर रहे हैं।
- परामर्श करें:http://php.net/manual/en/mysqli. तैयार करें.php
जैसा कि मैंने कहा, mysqli_escape_string()
फ़ंक्शन के लिए डेटाबेस कनेक्शन को पहले पैरामीटर के रूप में पारित करने की आवश्यकता होती है:
स्वयं पर उपकार करें और इसका उपयोग करें, ircmaxell के उत्तरों में से एक https://stackoverflow.com/a/29778421/
उनके जवाब से लिया गया:
बस एक पुस्तकालय का प्रयोग करें। गंभीरता से। वे एक कारण से मौजूद हैं।
- PHP 5.5+:
password_hash()<का उपयोग करें /कोड>
- PHP 5.3.7+:
password-compat
का उपयोग करें (उपरोक्त के लिए एक संगतता पैक) - अन्य सभी:phpass का उपयोग करें
इसे स्वयं मत करो। यदि आप अपना स्वयं का नमक बना रहे हैं, आप इसे गलत कर रहे हैं . आपको एक पुस्तकालय का उपयोग करना चाहिए जो आपके लिए इसे संभालता है।
$dbh = new PDO(...);
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
और लॉगिन करने पर:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}