gehashed password in en ui database
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?
Code (php)
Gewijzigd op 13/01/2019 14:54:06 door - Ariën -
password_verify.
Verder kan je hem gewoon met SELECT en fetch'en de hash uit je database halen, zodat je die in de genoemde functie kan gebruiken.
Kijk eens naar Verder kan je hem gewoon met SELECT en fetch'en de hash uit je database halen, zodat je die in de genoemde functie kan gebruiken.
Gewijzigd op 13/01/2019 14:39:13 door - Ariën -
INSERT INTO users ( id, user, password )
VALUES ( '', 'user', HASH( 'test')
???
Je moet dus de waarde van $hash gebruiken:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql = "INSERT INTO users (user, password)
VALUES ('".$username."', '".$hash."')";
// en dan je query uitvoeren met mysqli_query of hoe je dat gewend bent
?>
$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.
Gewijzigd op 13/01/2019 14:54:40 door - Ariën -
thanks!!
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.
ik wil gewoon een gehashed password in de database zetten zoals beschreven:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$user ='john';
$wachtwoord = 'Test';
$wachtwoord_alg = PASSWORD_DEFAULT;
$wachtwoord_opt = array();
$hash = password_hash($wachtwoord, $wachtwoord_alg, $wachtwoord_opt);
?>
$user ='john';
$wachtwoord = 'Test';
$wachtwoord_alg = PASSWORD_DEFAULT;
$wachtwoord_opt = array();
$hash = password_hash($wachtwoord, $wachtwoord_alg, $wachtwoord_opt);
?>
De waarde van $hash staat dus in de database als password.
Code (php)
1
2
3
4
2
3
4
<?php
$sql = "INSERT INTO users (user, password)
VALUES ('".$username."', '".$hash."')";
?>
$sql = "INSERT INTO users (user, password)
VALUES ('".$username."', '".$hash."')";
?>
Als ik dan wil kijken of het wachtwoord klopt wat in de database staat:
Code (php)
Vergeet ik nou iets??
Gewijzigd op 18/01/2019 19:52:38 door John Brat
missende single-quote op lijn 7
En als je het wilt controleren gebruik je password_verify.
Het eerste example legt het hopelijk al duidelijk uit.
Gewijzigd op 18/01/2019 19:40:23 door - Ariën -
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:
Code (php)
het resultaat van dit script is:
$2y$10$.AmkkyVILw9s39.bROl.celjEbV1greuREVleLAi0mEz35KFtmUXu
Dit zet ik dus als wachtwoord in de database?
Gewijzigd op 18/01/2019 20:09:38 door - Ariën -
John Brat op 18/01/2019 19:57:17:
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().