Wachtwoorden mogen nooit als platte tekst worden opgeslagen. Als een database wordt gehackt, zijn alle wachtwoorden direct zichtbaar. In plaats daarvan sla je een hash op: een eenrichtingsversleuteling die niet teruggedraaid kan worden.
PHP biedt twee functies:
password_hash() — maakt een veilige hash van een wachtwoordpassword_verify() — controleert of een wachtwoord overeenkomt met een hash<?php
$wachtwoord = "MijnGeheim123";
$hash = password_hash($wachtwoord, PASSWORD_DEFAULT);
echo $hash; // Iets als: $2y$10$randomtekens...
?>
Belangrijk: Gebruik ALTIJD password_hash() en password_verify(). Gebruik NOOIT md5() of sha1() voor wachtwoorden — deze zijn onveilig en makkelijk te kraken.
Let op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.
Maak een variabele $wachtwoord met de waarde "Welkom123". Hash het wachtwoord met password_hash() en PASSWORD_DEFAULT. Sla de hash op in $hash. Toon "Hash aangemaakt".
Hash het wachtwoord "Test456" en controleer daarna met password_verify() of "Test456" overeenkomt met de hash. Toon "Correct" als dat zo is, anders "Fout".
Hash het wachtwoord "GeheimWoord". Controleer daarna of het wachtwoord "foutwoord" overeenkomt met de hash. Toon "Toegang verleend" of "Toegang geweigerd".
Schrijf een functie registreer($wachtwoord) die de hash van het wachtwoord teruggeeft. Schrijf een functie login($wachtwoord, $hash) die true of false teruggeeft. Test: registreer "Veilig789", sla de hash op, en log in met hetzelfde wachtwoord. Toon "Ingelogd" bij succes.
Naast hashen is het belangrijk om wachtwoorden te valideren vóór registratie. Gebruik password_needs_rehash() om te controleren of een bestaande hash bijgewerkt moet worden (bijvoorbeeld als PHP een nieuwer algoritme gebruikt).
<?php
// Controleer of een hash verouderd is
$hash = '$2y$10$oudeHash...';
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
// Maak een nieuwe hash met het huidige algoritme
$nieuweHash = password_hash($wachtwoord, PASSWORD_DEFAULT);
}
?>
Schrijf een functie valideerWachtwoord($wachtwoord) die een array met foutmeldingen teruggeeft. Regels: minimaal 8 tekens, minstens één hoofdletter (preg_match("/[A-Z]/", ...)), minstens één cijfer (preg_match("/\d/", ...)). Test met "kort" en toon elke foutmelding met <br>.
Schrijf een functie veiligRegistreren($wachtwoord) die eerst het wachtwoord valideert (minimaal 8 tekens, minstens één hoofdletter en één cijfer). Als het geldig is, return de hash. Als het ongeldig is, return false. Test met "SterkW8woord" en toon "Registratie geslaagd" als het resultaat niet false is.
Bouw een compleet registratie- en loginsysteem met functies. Schrijf valideerWachtwoord($ww) (min 8 tekens, hoofdletter, cijfer), registreer($ww) (valideert en returnt hash of false), en login($ww, $hash) (verifieert). Registreer met "Welkom2025", log daarna in, en toon "Login succesvol".
password_hash($wachtwoord, PASSWORD_DEFAULT) om een veilige hash te makenpassword_verify($wachtwoord, $hash) om een wachtwoord te controlerenmd5() of sha1() voor wachtwoordenpassword_needs_rehash() controleert of een hash bijgewerkt moet wordenpassword_hash() genereert een andere hash (door een random salt)