Haszowanie haseł w PHP
Przechowywanie hasła w postaci otwartej jest niepoprawne. Haker-włamywacz może uzyskać dostęp do twojej bazy danych i ukraść hasła.
Dlatego zazwyczaj login jest przechowywany w postaci otwartej,
a hasło jest haszowane specjalną funkcją
md5, która przyjmuje hasło jako parametr,
a zwraca jego hash, na podstawie którego
nie można odtworzyć tego właśnie hasła.
Znajdźmy na przykład hash jakiegoś ciągu znaków:
<?php
echo md5('12345'); // wyświetli '827ccb0eea8a706c4c34a16891f84e7b'
?>
Teraz musimy przerobić naszą rejestrację i naszą autoryzację. Na początek radziłbym wyczyścić tabelę z użytkownikami, ponieważ obecnie przechowywane są tam hasła w postaci otwartej, a powinny być przechowywane ich hashe. Następnie podczas testowania rejestracji tabela wypełni się danymi w nowym formacie.
Poprawmy teraz naszą rejestrację tak, aby podczas zapisywania nowego użytkownika do bazy dodawane było nie hasło, a jego hash.
Opisana poprawka będzie przedstawiać się mniej więcej tak:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // przekształcamy hasło na jego hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Wprowadźmy analogiczne poprawki w autoryzacji:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // przekształcamy hasło na jego hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Wprowadź zmiany w rejestracji z uwzględnieniem haszowania, zarejestruj kilku nowych użytkowników, upewnij się, że do bazy danych dodali się z zahaszowanymi hasłami.
Wprowadź zmiany w autoryzacji z uwzględnieniem haszowania, spróbuj zalogować się na wcześniej zarejestrowanych użytkownikach.