password_verify în PHP

Verifică dacă o parolă introdusă se potrivește cu hash-ul creat de password_hash.

Sintaxă
password_verify(string $password, string $hash): bool

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_hash pe parola introdusă și compari cu hash-ul salvat. Nu se potrivește niciodată. Folosește password_verify.
  • Aplici trim sau htmlspecialchars pe 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.