Bezpieczne porównywanie haseł z hash_equals()
Założenie: Nauczyć się bezpiecznie porównywać hasła w PHP, unikając ataków typu timing attack, i zrozumieć zastosowanie funkcji hash_equals()
.
Krok po kroku:
- Generowanie hasha: Funkcja
password_hash()
generuje bezpieczne hashe. Użyjmy jej do zaszyfrowania hasła użytkownika. - Porównywanie hashy: Zamiast zwykłego operatora porównania (
==
), użyjmy funkcjipassword_verify()
do porównania podanego hasła z hashem. - Przykład z tokenem: Funkcja
hash_equals()
jest przydatna do porównywania tokenów, gdzie czas wykonania nie powinien zdradzać informacji.
$hashedPassword = password_hash("tajne_haslo", PASSWORD_DEFAULT);
Ten kod generuje bezpieczny hash z hasła “tajne_haslo” używając domyślnego algorytmu. Zmienna $hashedPassword
przechowuje wynik.
$userPassword = "tajne_haslo";
if (password_verify($userPassword, $hashedPassword)) {
echo "Hasła się zgadzają!";
} else {
echo "Hasła się nie zgadzają!";
}
password_verify()
porównuje podane hasło $userPassword
z istniejącym hashem $hashedPassword
. Funkcja ta jest odporna na ataki typu timing attack.
$token = "token_z_formularza";
$expectedToken = "token_z_sesji";
if (hash_equals($token, $expectedToken)) {
echo "Tokeny są identyczne!";
} else {
echo "Tokeny są różne!";
}
hash_equals()
porównuje dwa stringi w sposób stało-czasowy, co zapobiega atakom timing attack. Jest to szczególnie ważne przy weryfikacji tokenów bezpieczeństwa.
Ten przykład pokazuje podstawy bezpiecznego porównywania haseł i tokenów w PHP. Zachęcamy do dalszego zgłębiania tematu bezpieczeństwa aplikacji webowych!