Özet - Güvenlik
password_hash, htmlspecialchars ve CSRF'le güvenli giriş formu yazarsın.
Özet - Güvenlik araçları
Bu grupta dört temel güvenlik aracı öğrendin. password_hash ile parolaları güvenle saklarsın; password_verify ile doğrularsın. htmlspecialchars ile XSS'i, prepare ile SQL injection'ı önlersin.
CSRF token'ları sahte form gönderimini engeller; hash_equals ile zamanlama saldırılarına karşı doğrularsın. Şimdi bu araçları birleştirip güvenli bir giriş denetimi yazalım.
Uygulama Güvenli giriş denetimi yaz
verifyLogin($password, $csrf, $hash) fonksiyonu tanımla. İçinde hash_equals($_SESSION['csrf_token'], $csrf) ile CSRF token'ını doğrula; eşleşmezse false döndür. Sonra password_verify($password, $hash) ile parolayı doğrula. $hash ve $_SESSION['csrf_token'] zaten tanımlı. Doğru parola ve doğru CSRF ile verifyLogin'i çağır; sonucu "geçerli" veya "geçersiz" olarak yazdır.
Örnek çözümü göster
"geçersiz") . "\n"; yazdır.
Örnek çözüm:
<?php
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(16));
$storedHash = password_hash("gizli123", PASSWORD_DEFAULT);
function verifyLogin($password, $csrf, $hash) {
if (!hash_equals($_SESSION['csrf_token'], $csrf)) {
return false;
}
return password_verify($password, $hash);
}
$ok = verifyLogin("gizli123", $_SESSION['csrf_token'], $storedHash);
echo ($ok ? "geçerli" : "geçersiz") . "\n";
Kendini test et
-
Parolaları veritabanında saklamanın güvenli yolu nedir?
- Düz metin olarak
- md5 ile hash'leyerek
- password_hash + PASSWORD_DEFAULT
- base64_encode ile
Cevabı göster
password_hash + PASSWORD_DEFAULT — Doğru. password_hash + PASSWORD_DEFAULT güvenli ve güncel seçimdir.
-
Kullanıcı adını güvenle yazdır
echo ____($username, ENT_QUOTES, "UTF-8") . " ";Cevabı göster
echo htmlspecialchars($username, ENT_QUOTES, "UTF-8") . " "; -
Savunmayı saldırıya eşleştir
- password_hash
- Parola sızıntısına karşı
- htmlspecialchars
- XSS saldırısına karşı
- hash_equals
- CSRF taklidine karşı
- prepare
- SQL injection'a karşı