password_hash ve Argon2id ile Şifre Saklama
password hash ve Argon2id ile Şifre Saklama hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
İçindekiler
password_hash ve Argon2id ile Şifre Saklama hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
Temel kavram ve amaç
Veritabanı bir gün sızarsa kullanıcı şifrelerinin okunamaz olması gerekir. MD5 ve SHA-1 gibi hızlı özet fonksiyonları bunun için uygun değildir; modern ekran kartları saniyede milyarlarca deneme yapar. PHP'nin password_hash() fonksiyonu yavaş, tuzlanmış ve geleceğe uyumlu bir yöntem sunar.
Bilmeniz gereken 5 temel nokta
- Kendi yöntemini yazma: md5, sha1 ve kendi tuzlama düzeninizi bırakın; password_hash yeterli ve doğru olanı yapar.
- Argon2id: Bellek yoğun algoritma, ekran kartıyla toplu kırmayı pahalı hâle getirir.
- Sütun uzunluğu: Özet uzunluğu algoritmaya göre değişir; şifre sütununu VARCHAR(255) yapın.
- password_needs_rehash: Algoritma güçlendiğinde eski özetler kullanıcı giriş yaptıkça yenilenir.
- Giriş sonrası: session_regenerate_id(true) oturum sabitleme saldırısını önler.
PHP ile uygulama
Teoriyi somutlaştırmak için kısa bir PHP örneğine bakalım:
// Kayıt
$ozet = password_hash($sifre, PASSWORD_ARGON2ID); // ya da PASSWORD_DEFAULT
// Giriş
if (password_verify($girilen, $uye['sifre'])) {
// Algoritma ya da maliyet güncellendiyse sessizce yeniden özetle
if (password_needs_rehash($uye['sifre'], PASSWORD_ARGON2ID)) {
$yeni = password_hash($girilen, PASSWORD_ARGON2ID);
$pdo->prepare('UPDATE uyeler SET sifre = ? WHERE id = ?')->execute([$yeni, $uye['id']]);
}
session_regenerate_id(true);
}Örnek bilinçli olarak kısa tutuldu; gerçek projede hata yönetimi ve günlükleme gibi katmanlar eklenmelidir.
PHP 8 ile gelen match ifadesi ve isimli argümanlar, uzun switch ve parametre listelerini daha okunur hâle getirir.
Neden önemli? Kazanımlar
Bu yaklaşımı benimsediğinizde elde edeceğiniz başlıca faydalar:
- Saldırı yüzeyini daraltır ve olası veri sızıntılarının önüne geçer
- Güvenlik denetimlerinden daha kolay geçen bir kod tabanı sağlar
- Hataların canlı ortama çıkmadan fark edilmesine yardım eder
- Kullanıcı güvenini ve marka itibarını korur
Sonuç
Bu yazı boyunca password_hash ve Argon2id ile Şifre Saklama konusunun temel taşlarını ve uygulamada dikkat edilmesi gerekenleri gördük. Özellikle Kendi yöntemini yazma ve Giriş sonrası başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- Google Authenticator ile İki Adımlı Doğrulama (TOTP) Nasıl Çalışır?
- PHP PDO ile SQL Injection Koruması
- PHP ile Güvenli Dosya Yükleme: 8 Kontrol
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.