Ik heb een registratieformulier aangemaakt, en gebruikers kunnen hun gebruikersnaam en wachtwoord gewoon opgeven. En deze worden dan in de mysql database opgeslagen.
Ik gebruik niet meer dan volgende regel hiervoor.
mysql_query("INSERT INTO users (username, password) VALUES ('$username','$password')");
Maar de wachtwoorden worden gewoon als tekst opgeslagen in mijn mysql tabel(varchar). Hoe kan ik dit beter beveiligen zodat het wachtwoord gehashed word. En hoe unhash in het terug zodat ze nog wel steeds kunnen aanmelden?
Btw je moet geen Mysql_ meer gebruiken. gebruik Mysqli_ anders heb je straks een probleem als je webhosting een update geeft aan je huidige php versie.
<?php // kleurtjes
$password = $_POST['password'];
// controleer hier op minimale lengte, maximale lengte of wat dan ook
$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 12));
$test = $hash; // of verander '$test' in die query door $hash
?>
login pagina: include password.php
<?php // kleurtjes
// vervang regels 19 t/m 27 door dit
if(($username == $table_users) && password_verify($password, $table_password))
{
$_SESSION['user'] = $username; // heb je geen id dat je kan gebruiken? is wat netter
header("location: home.php");
exit();
}
?>
MD5 is niet aan te raden, zeker niet wanneer je maar 2 iteraties doet in plaats van een paar duizend. password_* functies zijn geschreven door mensen die er meer verstand van hebben dan wij.
mysql_connect("localhost", "root","usbw") or die(mysql_error()); //Connect to server
mysql_select_db("first_db") or die("Cannot connect to database"); //Connect to database
$query = mysql_query("SELECT * from users WHERE username='$username'"); //Query the users table if there are matching rows equal to $username
$exists = mysql_num_rows($query); //Checks if username exists
$table_users = "";
$table_password = "";
if($exists > 0) //IF there are no returning rows or no existing username
{
while($row = mysql_fetch_assoc($query)) //display all rows from query
{
$table_users = $row['username']; // the first username row is passed on to $table_users, and so on until the query is finished
$table_password = $row['password']; // the first password row is passed on to $table_users, and so on until the query is finished
}
if(($username == $table_users) && password_verify($password, $table_password))
{
$_SESSION['user'] = $username; // heb je geen id dat je kan gebruiken? is wat netter
header("location: home.php");
exit();
}
else
{
Print '<script>alert("Incorrect Password!");</script>'; //Prompts the user
Print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
}
}
else
{
Print '<script>alert("Incorrect Username!");</script>'; //Prompts the user
Print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
}
?>