gehashed password in en ui database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

John Brat

John Brat

13/01/2019 14:31:43
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$wachtwoord
= 'Test';
$wachtwoord_alg = PASSWORD_DEFAULT;
$wachtwoord_opt = array();

$hash = password_hash($wachtwoord, $wachtwoord_alg, $wachtwoord_opt);

echo $hash;
?>
Gewijzigd op 13/01/2019 14:54:06 door - Ariën -
 
PHP hulp

PHP hulp

15/11/2024 05:00:31
 
- Ariën  -
Beheerder

- Ariën -

13/01/2019 14:38:04
Quote Anchor link
Kijk eens naar 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.
Gewijzigd op 13/01/2019 14:39:13 door - Ariën -
 
John Brat

John Brat

13/01/2019 14:46:27
Quote Anchor link
ja, misschien domme vraag, maar hoe krijg ik die hash dan in de database?

INSERT INTO users ( id, user, password )
VALUES ( '', 'user', HASH( 'test')

???
 
- Ariën  -
Beheerder

- Ariën -

13/01/2019 14:50:57
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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 -
 
John Brat

John Brat

13/01/2019 15:00:18
Quote Anchor link
Tis nie zo moeilijk....
thanks!!
 
Thomas van den Heuvel

Thomas van den Heuvel

13/01/2019 16:47:07
Quote Anchor link
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.
 
John Brat

John Brat

18/01/2019 19:35:57
Quote Anchor link
Het is me toch nog niet helemaal duidelijk:
ik wil gewoon een gehashed password in de database zetten zoals beschreven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


De waarde van $hash staat dus in de database als password.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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??
Gewijzigd op 18/01/2019 19:52:38 door John Brat
 
- Ariën  -
Beheerder

- Ariën -

18/01/2019 19:39:51
Quote Anchor link
FRPM = FROM op lijn 2
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 -
 
John Brat

John Brat

18/01/2019 19:57:17
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$wachtwoord
= 'test';
$wachtwoord_alg = PASSWORD_DEFAULT;
$wachtwoord_opt = array();

$hash = password_hash($wachtwoord, $wachtwoord_alg, $wachtwoord_opt);

echo $hash;
?>

het resultaat van dit script is:

$2y$10$.AmkkyVILw9s39.bROl.celjEbV1greuREVleLAi0mEz35KFtmUXu

Dit zet ik dus als wachtwoord in de database?
 
- Ariën  -
Beheerder

- Ariën -

18/01/2019 20:03:54
Quote Anchor link
Ja, je wilt immers geen zichtbare wachtwoorden opslaan. En ja, de hash verandert per keer dat je hem genereert.
Gewijzigd op 18/01/2019 20:09:38 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

18/01/2019 20:17:24
Quote Anchor link
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().
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.