2016-10-18 2 views
-3

Ich hatte eine Weile recherchiert und bekam sogar meine Hosting-Firma für Hilfe, aber ich habe ein Problem mit meinem PHP-Code und meine Datenbank über meine Website . Während der Code, den ich habe, Hash das Passwort, das ich eingeben, wenn ich versuche, das normale Wort Passwort zu verwenden, erscheint es als falsch. Aber wenn ich das Hash-Passwort kopiere und einfüge, funktioniert es.Hash ein Passwort in PHP, bevor es in die Datenbank geht, Fehler erhalten

<?php 
/* NEW.PHP 
    Allows user to create a new entry in the database 
*/ 
// creates the new record form 

// since this form is used multiple times in this file, I have made it a function that is easily reusable 

function renderForm($email, $pass, $error) 
{ 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd"> 

<html> 
<head> 
<title>New User</title> 
<link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 

<?php 

// if there are any errors, display them 
if ($error != '') { 
    echo '<div style="padding:4px; border:1px soluser_id red;  color:red;">'.$error.'</div>'; 
} 
?> 

<form action="" method="post"> 
<div> 
<strong>Update User Info <br><br><br><br><br>Email: *</strong> 
<input type="text" name="email" value="<?php echo $email; ?>" /><br/> 
<strong>Password: *</strong> <input type="password" name="pass" value="<?php echo $pass; ?>" /><br/> 
<p>* required</p> 
<input type="submit" name="submit" value="Submit"> <br><br>Back to <a href="index2.html">home</a>?</div> 
</form> 
</body> 
</html> 
<?php 
} 

// connect to the database 
include('connect-db.php'); 

// check if the form has been submitted. If it has, start to process the form and save it to the database 

if (isset($_POST['submit'])) { 
    // get form data, making sure it is valuser_id 
    $email = mysql_real_escape_string(htmlspecialchars($_POST['email'])); 
    $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass'])); 
    // check to make sure both fields are entered 

    if ($email == '' || $pass == '') { 
     // generate error message 
     $error = 'ERROR: Please fill in all required fields!'; 
     // if either field is blank, display the form again 
     renderForm($email, $pass, $error); 
    } else { 

     // save the data to the database 

     mysql_query("INSERT users SET email='$email', pass=MD5('$pass')") 
      or die(mysql_error()); 
     // once saved, redirect back to the view page 
     header("Location: view.php"); 
    } 
} else { 

    // if the form hasn't been submitted, display the form 
    renderForm('','',''); 
} 
?> 

Wie Sie sehen, es es ist Hash, wenn ich es in die Datenbank eingeben, aber wenn ich versuche, das Passwort bei der Art und Weise zu verwenden, es ursprünglich geschrieben wurde, es sagt mir, es die falsche ist.

+4

Wenn Sie vor der Speicherung von Passwörtern Sicherheit hinzufügen möchten, ist 'md5' eine schreckliche Wahl. Informieren Sie sich über BCrypt. – Madbreaks

+0

Mir ist klar, dass MD5 ziemlich nutzlos Hashing ist, aber wenn ich das zuerst zur Arbeit bringen kann, wäre ich mehr als froh, eine andere Methode auszuprobieren. –

+4

Sie sollten vorbereitete Anweisungen für die Interaktion mit der Datenbank verwenden, Sie öffnen sich für die SQL-Injektion. http://php.net/manual/en/pdo.prepared-statements.php – kyle

Antwort

-5

Ich würde das MD5-Hashing auf der PHP-Seite tun. Drucken Sie es aus, bevor es in die Datenbank geht, und versuchen Sie es mit der Eingabe auf dem Anmeldeformular zu vergleichen.

Auch die htmlspecialchars wird in diesem Fall nicht benötigt. Da ist deine Flucht in Ordnung. Wenn es seltsame Zeichen enthalten würde, würde es sie mit der Datenbank abgleichen.

Stellen Sie außerdem sicher, dass der Codierungstyp auf beiden Seiten festgelegt ist und dass sie identisch sind.

-5

Ohne Ihre SELECT-Abfrage im Login-Formular zu sehen, würde ich fragen, ob Sie MD5 Hashing es, wenn Sie es auch auswählen?

mysql_query("SELECT * FROM users WHERE email='$email' AND pass=MD5('$pass')") 
or die(mysql_error()); 

Allerdings stimme ich zu, dass Sie MD5 nicht für Passwort-Hashing verwenden sollten. Check out http://php.net/manual/en/function.password-hash.php

+0

Ich denke, ich verstehe es jetzt, also wenn ich einen Benutzer anmelden möchte, möchte ich sicherstellen, dass alles, was sie eintippen, gehackt wird, und das wird dann mit meinem Datenbankeintrag verglichen? –

+0

Ja! Das ist richtig. –

+2

@StevenEck Sie sollten diesen Ansatz wirklich nicht verwenden.Lesen Sie alle Kommentare unter Ihrer Frage, die Sie davor warnen, und empfehlen Sie echte Hashes wie 'password_hash()' (und die Verwendung von 'mysql_' für diese Angelegenheit). Du hast geschrieben "Du wolltest, dass das zuerst funktioniert", aber warum machst du dein Haus zuerst grün, wenn du es blau willst? Es ist zweimal die Arbeit für keinen guten Zweck. – Qirel

Verwandte Themen