Ce face password_verify
La autentificare, citești din baza de date hash-ul salvat și îl dai lui password_verify împreună cu parola introdusă. Funcția extrage din hash algoritmul, costul și sarea, recalculează și compară rezultatul.
Comparația durează la fel indiferent unde diferă textele, ca să nu ofere indicii unui atacator. Funcționează și cu hash-urile vechi create cu alt algoritm sau alt cost, deci poți schimba setările fără să îi pui pe utilizatori să își reseteze parola.
Parametri
| Parametru | Descriere |
|---|---|
$password |
Parola introdusă în formular. |
$hash |
Hash-ul salvat, creat cu password_hash. |
Ce returnează
true dacă parola este corectă, altfel false.
Exemple
Exemplul 1: Parolă corectă și greșită
<?php
$hashSalvat = password_hash("Ana#2026!", PASSWORD_DEFAULT);
var_dump(password_verify("Ana#2026!", $hashSalvat));
var_dump(password_verify("ana#2026!", $hashSalvat));
Rezultat
bool(true)
bool(false)
Exemplul 2: Autentificare
Mesajul de eroare este același pentru email inexistent și parolă greșită, ca să nu afle cineva ce adrese au cont.
<?php
// rândul citit din baza de date după email
$utilizator = ["id" => 42, "parola" => password_hash("Ana#2026!", PASSWORD_DEFAULT)];
$introdusa = "Ana#2026!";
if ($utilizator && password_verify($introdusa, $utilizator["parola"])) {
echo "Autentificare reușită. ID: " . $utilizator["id"];
} else {
echo "Email sau parolă greșită.";
}
Rezultat
Autentificare reușită. ID: 42
Greșeli frecvente
- Faci din nou
password_hashpe parola introdusă și compari cu hash-ul salvat. Nu se potrivește niciodată. Foloseștepassword_verify. - Aplici
trimsauhtmlspecialcharspe parolă înainte de verificare, dar nu și la creare (sau invers). Parola trebuie prelucrată identic în ambele locuri; cel mai sigur este să nu o modifici deloc.
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_needs_rehash: Verifică dacă un hash de parolă a fost creat cu alt algoritm sau alt cost decât cele actuale și trebuie refăcut.session_regenerate_id: Schimbă identificatorul sesiunii și păstrează datele. Se apelează la autentificare, contra atacurilor de tip session fixation.