Ce face password_needs_rehash
Cu timpul, setările recomandate se schimbă: crește costul, apare un algoritm mai bun. password_needs_rehash compară hash-ul salvat cu setările pe care le folosești acum.
Momentul potrivit pentru actualizare este autentificarea: abia atunci ai parola în clar. După un password_verify reușit, dacă password_needs_rehash returnează true, calculezi un hash nou și îl salvezi.
Parametri
| Parametru | Descriere |
|---|---|
$hash |
Hash-ul salvat. |
$algo |
Algoritmul folosit acum, de obicei PASSWORD_DEFAULT. |
$options |
Opțional. Opțiunile folosite acum, de exemplu ["cost" => 12]. |
Ce returnează
true dacă hash-ul trebuie refăcut, altfel false.
Exemple
Exemplul 1: Hash vechi, cu cost 10
<?php
$vechi = password_hash("parola", PASSWORD_BCRYPT, ["cost" => 10]);
$nou = password_hash("parola", PASSWORD_DEFAULT);
var_dump(password_needs_rehash($vechi, PASSWORD_DEFAULT));
var_dump(password_needs_rehash($nou, PASSWORD_DEFAULT));
Rezultat
bool(true)
bool(false)
Exemplul 2: Actualizare la autentificare
<?php
$parola = "Ana#2026!";
$hashSalvat = password_hash($parola, PASSWORD_BCRYPT, ["cost" => 10]);
if (password_verify($parola, $hashSalvat)) {
if (password_needs_rehash($hashSalvat, PASSWORD_DEFAULT)) {
$hashSalvat = password_hash($parola, PASSWORD_DEFAULT);
// UPDATE utilizatori SET parola = ? WHERE id = ?
echo "Hash actualizat: " . substr($hashSalvat, 0, 7) . "...\n";
}
echo "Autentificat.";
}
Rezultat
Hash actualizat: $2y$12$...
Autentificat.
Greșeli frecvente
- Apelezi funcția înainte de
password_verifyși refaci hash-ul pentru o parolă greșită. Verifică întâi parola.
Comenzi înrudite
password_hash: Creează un hash sigur pentru o parolă, gata de salvat în baza de date. Este modul corect de a stoca parole.password_verify: Verifică dacă o parolă introdusă se potrivește cu hash-ul creat de password_hash.