CodeBlanks Logo Icon CodeBlanks

password_verify() ile doğrulama

PHP kursu · İleri seviye · Ders 61/92

password_verify() ile düz parolayı hash'le karşılaştırmayı öğrenirsin.

password_verify nasıl çalışır?

password_verify($password, $hash) düz parolayı elindeki hash ile karşılaştırır ve true veya false döndürür. Hash'in içindeki tuz ve maliyet bilgisi otomatik okunur; sen ekstra bir şey yapmazsın.

Doğrulama sırasında zamanlama saldırılarını (timing attack) önlemek için sabit süreli karşılaştırma kullanılır. Bu yüzden == ile kendi karşılaştırmanı yazma; her zaman password_verify kullan.

hash_equals ne işe yarar?

Bazen iki dizeyi güvenle karşılaştırmak gerekir: CSRF token, OTP kodu gibi. == operatörü karakterleri sırayla karşılaştırır ve ilk farkta durur; bu süre saldırgana ipucu verir.

hash_equals($known, $userInput) her zaman aynı sürede çalışır; böylece zamanlama saldırısı engellenir. password_verify da içeride buna benzer bir yöntem kullanır.

Uygulama verify fonksiyonunu yaz

verify($password, $hash) fonksiyonu tanımla. İçinde password_verify ile parolayı kontrol edip bool döndürsün. $hash değişkeni zaten tanımlı. verify("gizli123", $hash) ve verify("wrong", $hash) çağır; her sonucu "geçerli" veya "geçersiz" olarak yazdır.

Örnek çözümü göster
"geçersiz") . "\n"; ve echo (verify("wrong", $hash) ? "geçerli" : "geçersiz") . "\n"; çağır.
Örnek çözüm:
<?php
$hash = password_hash("gizli123", PASSWORD_DEFAULT);
function verify($password, $hash) {
    return password_verify($password, $hash);
}
echo (verify("gizli123", $hash) ? "geçerli" : "geçersiz") . "\n";
echo (verify("wrong", $hash) ? "geçerli" : "geçersiz") . "\n";

Kendini test et

  1. password_verify çağrısını tamamla

    $valid = ____($password, $hash);
    Cevabı göster
    $valid = password_verify($password, $hash);
  2. İki hash'i == ile karşılaştırmak neden risklidir?

    • Zamanlama saldırısına açıktır
    • Yanlış sonuç verebilir
    • Daha yavaştır
    • PHP hata verir
    Cevabı göster

    Zamanlama saldırısına açıktır — Doğru. == ilk farkta durur; bu süre saldırgana ipucu verir.

  3. Doğrulama kavramlarını eşleştir

    password_verify
    Hash ile karşılaştırır
    hash_equals
    Sabit süreli karşılaştırma
    true
    Eşleşme başarılı
    false
    Eşleşme yok

İleri seviye bölümündeki tüm dersler