Password-hashing i PHP
Det er forkert at gemme adgangskoder i klartekst. En hacker med ondsindede hensigter kan få adgang til din database og stjæle adgangskoderne.
Derfor gemmes login normalt i klartekst,
mens adgangskoden hashes med en speciel funktion
md5, som tager adgangskoden som parameter
og returnerer dens hash, hvorfra
det er umuligt at gendanne selve adgangskoden.
Lad os for eksempel finde hashen for en vilkårlig streng:
<?php
echo md5('12345'); // udskriver '827ccb0eea8a706c4c34a16891f84e7b'
?>
Nu er vi nødt til at omstrukturere vores registrering og vores autorisation. Til at starte med vil jeg anbefale at rydde tabellen med brugere, da der i øjeblikket gemmes adgangskoder i klartekst, mens der skal gemmes deres hashes. Derefter, når du tester registreringen, vil tabellen blive fyldt med data i det nye format.
Lad os nu rette vores registrering, så der ved lagring af en ny bruger i databasen tilføjes ikke adgangskoden, men dens hash.
Den beskrevne rettelse vil se ud på følgende måde:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // omdanner adgangskoden til dens hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Lad os foretage lignende ændringer i autorisationen:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // omdanner adgangskoden til dens hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Foretag ændringer i registreringen under hensyntagen til hashing, registrer et par nye brugere, og sikr dig, at de blev tilføjet til databasen med hashede adgangskoder.
Foretag ændringer i autorisationen under hensyntagen til hashing, og prøv at logge ind under de tidligere registrerede brugere.