Wachtwoord hashen in PHP
Het is niet correct om wachtwoorden in leesbare vorm op te slaan. Een kwaadwillende hacker kan toegang krijgen tot je database en de wachtwoorden stelen.
Daarom wordt de login meestal in leesbare
vorm opgeslagen, en het wachtwoord wordt gehasht met een speciale functie
md5, die het wachtwoord als parameter accepteert
en de hash retourneert, waarmee
het oorspronkelijke wachtwoord niet kan worden hersteld.
Laten we bijvoorbeeld de hash van een willekeurige string vinden:
<?php
echo md5('12345'); // geeft '827ccb0eea8a706c4c34a16891f84e7b' weer
?>
Nu moeten we onze registratie en onze autorisatie aanpassen. Om te beginnen zou ik adviseren om de tabel met gebruikers leeg te maken, omdat daar momenteel wachtwoorden in leesbare vorm staan opgeslagen, terwijl hun hashes opgeslagen moeten worden. Vervolgens zal tijdens het testen van de registratie de tabel worden gevuld met gegevens in het nieuwe formaat.
Laten we nu onze registratie aanpassen zodat er bij het opslaan van een nieuwe gebruiker in de database niet het wachtwoord, maar zijn hash wordt toegevoegd.
De beschreven aanpassing ziet er ongeveer zo uit:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // converteren het wachtwoord naar zijn hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Laten we vergelijkbare aanpassingen doorvoeren in de autorisatie:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // converteren het wachtwoord naar zijn hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Voer de wijzigingen door in de registratie rekening houdend met hashing, registreer een paar nieuwe gebruikers, en zorg ervoor dat ze zijn toegevoegd aan de database met gehashte wachtwoorden.
Voer de wijzigingen door in de autorisatie rekening houdend met hashing, probeer in te loggen onder de eerder geregistreerde gebruikers.