Bezpieczne przechowywanie haseł
Hashuj hasła za pomocą password_hash i weryfikuj je za pomocą password_verify
Bezpieczne przechowywanie haseł to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Nigdy nie przechowuj haseł w postaci jawnego tekstu
Przechowywanie haseł w postaci jawnego tekstu oznacza, że wyciek bazy danych ujawni hasło każdego użytkownika. Zawsze przechowuj skrót kryptograficzny — najlepiej bcrypt, Argon2id lub scrypt.
password_hash()
Wbudowana funkcja PHP password_hash() tworzy bezpieczny skrót z losową solą uwzględnioną w wyniku.
<?php
$hash = password_hash("mysecretpassword", PASSWORD_BCRYPT);
// Output: $2y$10$... (includes algorithm, cost, salt, hash)password_verify()
Weryfikuj hasło w postaci jawnego tekstu względem zapisanego skrótu.
<?php
$hash = "$2y$10$abcdef...";
$valid = password_verify("mysecretpassword", $hash);
if ($valid) {
echo "Correct password!";
}Opcje algorytmów
PHP obsługuje:
PASSWORD_BCRYPT— szeroko obsługiwany, limit 72 bajtówPASSWORD_ARGON2I— wymagający dużej ilości pamięci (PHP 7.2+)PASSWORD_ARGON2ID— zalecany, odporny na ataki z użyciem GPU (PHP 7.3+)PASSWORD_DEFAULT— obecnie bcrypt, ale w przyszłych wersjach PHP może się zmienić
Współczynnik kosztu
Współczynnik kosztu określa, jak długo trwa obliczanie skrótu. Wyższy koszt oznacza wolniejsze ataki brute force. Domyślny koszt bcrypt wynosi 10.
<?php
$hash = password_hash("secret", PASSWORD_BCRYPT, ["cost" => 12]);
// Cost 12 takes ~0.5s on typical hardware — acceptable for loginpassword_needs_rehash()
Po zaktualizowaniu PHP lub zmianie ustawień kosztu sprawdź, czy istniejące skróty wymagają aktualizacji.
<?php
if (password_verify($plain, $storedHash) &&
password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
$user->update(["password" => password_hash($plain, PASSWORD_DEFAULT)]);
}Fasada Hash Laravel
Laravel opakowuje password_hash w fasadę Hash, domyślnie używając bcrypt.
<?php
use Illuminate\Support\Facades\Hash;
$hash = Hash::make("mysecretpassword");
$valid = Hash::check("mysecretpassword", $hash); // trueArgon2 w Laravel
Skonfiguruj Laravel tak, aby używał Argon2id w pliku config/hashing.php.
// config/hashing.php
"driver" => "argon2id",Obsługa soli
Nowoczesne funkcje skrótów PHP automatycznie uwzględniają kryptograficznie losową sól. Nigdy nie implementuj własnego mechanizmu dodawania soli — łatwo zrobić to nieprawidłowo.
Pepper (sekret na poziomie aplikacji)
Opcjonalny dodatkowy sekret (pepper), przechowywany poza bazą danych, można dodać przed obliczeniem skrótu. Nawet jeśli baza danych zostanie skradziona, atakujący nie może przeprowadzić ataku brute force bez peppera.
Porównywanie odporne na ataki czasowe
password_verify() wewnętrznie używa porównania w czasie stałym, zapobiegając atakom czasowym. Nigdy nie porównuj skrótów za pomocą ==.
Podsumowanie
Używaj password_hash() z PASSWORD_DEFAULT lub PASSWORD_ARGON2ID. Weryfikuj hasła za pomocą password_verify(). W razie potrzeby ponownie obliczaj skrót podczas logowania. Nigdy nie przechowuj haseł w postaci jawnego tekstu ani nie używaj MD5/SHA1 do haseł.
Szybkie sprawdzenie
Jaka funkcja weryfikuje hasło względem skrótu wygenerowanego przez PHP?
Często zadawane pytania
Czy lekcja „Bezpieczne przechowywanie haseł” jest bezpłatna?
Tak — pełny tekst „Bezpieczne przechowywanie haseł” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Bezpieczne przechowywanie haseł”?
Hashuj hasła za pomocą password_hash i weryfikuj je za pomocą password_verify Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Bezpieczne przechowywanie haseł”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zapobieganie Cross-Site Scripting (XSS)
- SQL injection i zapytania parametryzowane
- Ochrona CSRF
- Bezpieczne przechowywanie haseł