Hallo,

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?

Thanks!
Hashen = eenrichtingsverkeer. Je kunt een hash niet terugvertalen.

Als iemand zijn/haar wachtwoord verliest moeten ze maar een nieuwe opvragen middels hun e-mail.

Er zijn TIG manieren om wachtwoorden te versleutelen. Afhankelijk van hoe veilig deze moet zijn maak je een keuze. De manier waarop je loginmechanisme werkt en hoe sterk je wachtwoorden moeten zijn dragen ook aan deze veiligheid bij. Tis maar net hoeveel tijd/geld/moeite je hier in wilt steken.
Bedankt voor je reactie.

Wat is dan een goede manier om je wachtwoord te versleutelen? Mag iets simpels zijn, maar gewoon zodat iemand die de tabellen uitleest van je database dat ze niet de wachtwoord kunnen lezen?
Als iemand je tabellen kan uitlezen (en kan wijzigen?) dan maakt het allemaal niet zoveel meer uit wel? :]

Je zou MD5() kunnen gebruiken (maar deze is verouderd, ik hoor op de achtergrond nu al het boe-geroep van puristen), of wellicht beter SHA1() (edit: of misschien ook niet meer, leest dit).

En als je PHP-versie nieuwe genoeg is (>= 5.5.0) kun je password_hash gebruiken.

Er zijn waarschijnlijk ook een hoop topics over password hashing in PHP te googlen.
PHP 5 >= 5.5.0
<?php
$password = '12345';
$hash = password_hash($password, 'sha256');
echo $hash;
?>

Als een gebruiker wil inloggen dan vergelijk je niet meer de paswoorden maar de hashes.
<?php
$hash = password_hash($_POST['password'], 'sha256');

if($row = mysqli_fetch_assoc()) {
if($hash === $row['hash'])
// password ok
}

?>
en hoe kunnen gebruikers dan inloggen? Want dan zouden ze hun hash moeten weten vooraleer ze hiermee kunnen inloggen?
Nee, je vertaalt hun wachtwoord opnieuw naar de bijbehorende hash. En deze vergelijk je dan met wat opgeslagen is in de database.
oh bedankt hadden gelijktijdig geantwoord :), ik probeer het eens uit :)
Ronnie Peeters op 08/03/2015 17:32:48

oh bedankt hadden gelijktijdig geantwoord :), ik probeer het eens uit :)


ja dacht ik al dat gebeurt zo vaak!
Ik krijg de volgende foutbooschap
Fatal error: Call to undefined function password_hash()

Reageren