Door
John Brat
op 13-01-2019 14:31
gewijzigd op 13-01-2019 14:54
2.611 views
Hoi,
Ik heb een een wachtwoord gehasht en wil die in de database zetten en later bij het inloggen uit de database halen maar krijg niet echt gevonden hoe ik dit moet doen.
Iemand een tip?
Geen HASH in MySQL gebruiken, want je hebt immers in PHP met password_hash() de hash berekend. HASH() in MySQL gebruikt mogelijk een ander hashing-algoritme.
Je moet dus de waarde van $hash gebruiken:
<?php
$sql = "INSERT INTO users (user, password)
VALUES ('".$username."', '".$hash."')";
// en dan je query uitvoeren met mysqli_query of hoe je dat gewend bent
?>
Verder heb ik het 'id'-veld eruit gelaten.
Die lijkt mij automatisch te worden gevuld.
Simpelweg omdat iets werkt, maakt het nog niet juist... of veilig.
Zorg dat je de achterliggende principes snapt.
Wanneer je query die je wachtwoord controleert vatbaar is voor SQL-injectie maakt het niet uit wat voor geavanceerde manier je gebruikt om wachtwoorden te beveiligen, dit wordt dan gewoon omzeild.
Als ik dan wil kijken of het wachtwoord klopt wat in de database staat:
<?php
$sql = "SELECT user, password FROM users WHERE user =? AND password =?";
$query = $conn->prepare($sql);
$query->execute(array($user, $password);
$row = $query->fetch(PDO::FETCH_BOTH);
if ($query->rowCount()) > 0 {
echo 'password is ok';
} else {
echo 'password is fout';
}
?>
Vergeet ik nou iets??
FRPM = FROM op lijn 2
missende single-quote op lijn 7
En als je het wilt controleren gebruik je [php]password_verify[/php].
Het eerste example legt het hopelijk al duidelijk uit.
ok, duidelijker typen zonder fouten, maar toch begrijp ik nog het nog steeds niet.
Wat er in de database is gezet destijds is het gehashte wachtwoord (test in dit geval). iedere keer als ik het het wachtwoord test hash, komt er een ander resultaat uit.
bijvoorbeeld:
<?php
iedere keer als ik het het wachtwoord test hash, komt er een ander resultaat uit.
Dit klopt.
Bestudeer de werking van password_hash() en password_verify().
Nogmaals, zorg dat je de principes snapt.
Dit is ook de reden dat je het wachtwoord niet in je WHERE-conditie kunt zetten, deze is ook niet "leidend" bij de query voor het ophalen van gebruikersgegevens met als doel om na te gaan of het ingevoerde wachtwoord overeenkomt. Het idee is dat je de wachtwoord-hash ophaalt aan de hand van een username (of e-mailadres, of een of ander ding dat een gebruiker uniek identificeert). Je controleert vervolgens of deze hash equivalent is aan het ingevoerde wachtwoord met behulp van password_verify().