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:

  1. Generowanie hasha: Funkcja password_hash() generuje bezpieczne hashe. Użyjmy jej do zaszyfrowania hasła użytkownika.
  2. 
    $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.

  3. Porównywanie hashy: Zamiast zwykłego operatora porównania (==), użyjmy funkcji password_verify() do porównania podanego hasła z hashem.
  4. 
    $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.

  5. Przykład z tokenem: Funkcja hash_equals() jest przydatna do porównywania tokenów, gdzie czas wykonania nie powinien zdradzać informacji.
  6. 
    $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!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *