Salasanan hashaus PHP:llä
Salasanan tallentaminen avoimessa muodossa on väärin. Hakkeri-pahantahtoinen henkilö voi saada pääsyn tietokantaasi ja varastaa salasanat.
Sen vuoksi yleensä kirjautumistunnus tallennetaan avoimessa
muodossa, ja salasana hashataan erityisellä funktiolla
md5, joka ottaa parametrina
salasana, ja palauttaa sen hashin, josta
ei voi palauttaa itse salasanaa.
Etsitään esimerkiksi minkä tahansa merkkijonon hash:
<?php
echo md5('12345'); // tulostaa '827ccb0eea8a706c4c34a16891f84e7b'
?>
Nyt meidän on muutettava rekisteröintimme ja kirjautumisemme. Aluksi suosittelisin tyhjentämään käyttäjätaulun, koska siellä on nyt tallennettuna salasanat avoimessa muodossa, kun niiden pitäisi olla tallennettuna niiden hashit. Sitten testauksen yhteydessä taulu täyttyy tiedoilla uudessa muodossa.
Korjataan nyt rekisteröintiämme siten, että kun uusi käyttäjä tallennetaan tietokantaan, lisätään ei salasanaa, vaan sen hash.
Kuvattu korjaus on jotain tällaista:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // muunnetaan salasana sen hashiksi
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Tehdään vastaavat muutokset kirjautumiseen:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // muunnetaan salasana sen hashiksi
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Tee muutokset rekisteröintiin ottaen huomioon hashaus, rekisteröi pari uutta käyttäjää, varmista, että heidät lisättiin tietokantaan hashatuilla salasanoilla.
Tee muutokset kirjautumiseen ottaen huomioon hashaus, yritä kirjautua aikaisemmin rekisteröityjen käyttäjien tunnuksilla.