[PHP] Login met crypt() geeft verkeerde waardes

Pagina: 1
Acties:

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Voor een login gebruik ik crypt als hash methode. Echter krijg ik andere waardes terug wanneer ik inlog. Het wachtwoord ziet er dus anders uit bij het inloggen als bij het aanmaken van het wachtwoord, terwijl ik toch dezelfde code gebruik. Ik weet gewoon niet wat er verkeerd gaat of wat ik fout doe.

In onderstaande scripts werken de queries overigens goed. Alleen het wachtwoord is verschillend.

Wachtwoord aanmaken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$salt = base64_encode($salt);
$salt = str_replace('+', '.', $salt);
$wachtwoord = crypt(''.$_POST["wachtwoord"].'', '$2y$10$'.$salt.'$');

$query = "INSERT INTO klanten (emailadres, wachtwoord) VALUES (".mysqli_real_escape_string($connectie, $_POST["emailadres"])."', '".mysqli_real_escape_string($connectie, $wachtwoord)."')";
$result = mysqli_query($connectie, $query); 
$klanten_id = mysqli_insert_id($connectie);                                     

$query_salt = "INSERT INTO login (klant, code) VALUES ('".mysqli_real_escape_string($connectie, $klanten_id)."', '".mysqli_real_escape_string($connectie, $salt)."')";
$result_salt = mysqli_query($connectie, $query_salt);


Wachtwoord controleren bij de login:
PHP:
1
2
3
4
5
6
7
8
$query_salt = "SELECT code FROM login WHERE klant = '".$row_check_login['verificatie']."'";
$result_salt = mysqli_query($connectie, $query_salt);
$row_salt = mysqli_fetch_assoc($result_salt);

$wachtwoord = crypt(''.$_POST["wachtwoord"].'', '$2y$10$'.$row_salt['code'].'$');

$query_login = "SELECT klanten_id FROM klanten WHERE emailadres = '".mysqli_real_escape_string($connectie, $_POST["gebruikersnaam"])."' AND wachtwoord = '".mysqli_real_escape_string($connectie, $wachtwoord)."'";
$result_login = mysqli_query($connectie, $query_login);

  • Stroopwafels
  • Registratie: September 2009
  • Laatst online: 08:49
Wat krijg je als je $wachtwoord var_dump't in beide scripts?
Waar is de check om te controleren of het wachtwoord klopt?

Het is trouwens onnodig om single quotes aan beide kanten van $_POST['wachtwoord'] te zetten.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Matthijs1982 schreef op maandag 23 november 2015 @ 00:20:
PHP:
1
$wachtwoord = crypt(''.$_POST["wachtwoord"].'', '$2y$10$'.$salt.'$');
Waarom gebruik je niet gewoon password_hash :?
En waarom gebruik je geen Parametrized Queries?

Verder is dit gewoon een kwestie van debuggen (Debuggen: Hoe doe ik dat?) en heeft het wel wat weg van wat ik eerder elders postte. M.a.w. var_dump je $_POST values eens, kijk wat er in de DB staat, kijk wat de select returned d.m.v. die values te var_dumpen enz. enz. en ga bij jezelf na of dat ook is wat je verwacht(te) dat er overal uitkomt. Dit moet je makkelijk zélf kunnen oplossen.

[ Voor 67% gewijzigd door RobIII op 23-11-2015 01:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 18-06-2025

Amanush

Saai persoon.

Gebruik password_hash :).

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 02-02 15:12
En als je nog een oudere PHP < 5.5 gebruikt, kan je de password_compat library gebruiken.
Je hoeft ook niet de salt los op te slaan, maar die staat in het gegenereerde wachtwoord. Die kan je dus in zijn geheel als salt gebruiken.

Je hoeft dus 2 niet queries te doen, maar 1: Gebruik het e-mailadres om te zoeken naar de klant, haal het wachtwoord (inclusief salt dus), gebruik dat als salt om het login wachtwoord te hashen en vergelijk dan het wachtwoord uit de database met je nieuw gegenereerde wachtwoord.

Maar alsnog, gebruik password_hash, die maakt automatisch een veilige hash voor je. En $2a is opgevolgd door $2y, zoals in de docs staat.

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Bedankt voor jullie tips en antwoorden. Ik ben overtuigd en bouw het om naar password_hash().
Is inderdaad beter.

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Kijk dan ook meteen even naar PDO (vooral prepare in dit geval).

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 18-06-2025

Amanush

Saai persoon.

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Matthijs1982 schreef op maandag 23 november 2015 @ 00:20:
Voor een login gebruik ik crypt als hash methode. Echter krijg ik andere waardes terug wanneer ik inlog. Het wachtwoord ziet er dus anders uit bij het inloggen als bij het aanmaken van het wachtwoord, terwijl ik toch dezelfde code gebruik. Ik weet gewoon niet wat er verkeerd gaat of wat ik fout doe.

In onderstaande scripts werken de queries overigens goed. Alleen het wachtwoord is verschillend.

Wachtwoord aanmaken:
PHP:
1
2
3
$wachtwoord = crypt(''.$_POST["wachtwoord"].'', '$2y$10$'.$salt.'$');

$wachtwoord = crypt(''.$_POST["wachtwoord"].'', '$2y$10$'.$row_salt['code'].'$');
Ik denk dat je ook nog even moet leren hoe strings werken, je plakt nu lege strings aan elkaar met variabelen... niet leesbaar en totaal overbodig.

[ Voor 18% gewijzigd door Cartman! op 23-11-2015 20:46 ]

Pagina: 1