CSRF token üretimi
Oturum tabanlı CSRF token üretip formlarda doğrulamayı öğrenirsin.
CSRF nedir?
CSRF (cross-site request forgery), kullanıcının başka bir sitedeyken habersizce form göndermesidir. Tarayıcı oturum çerezini otomatik eklediği için saldırgan kullanıcının kimliğiyle işlem yapabilir.
Savunma: her oturum için rastgele bir CSRF token üret ve $_SESSION içinde sakla. Form gönderildiğinde token'ı hash_equals ile doğrula. Saldırgan token'ı bilemeyeceği için sahte istek engellenir.
Token üretimi ve oturum güvenliği
Güçlü bir token için random_bytes(32) kullanılır; bu kriptografik açıdan güvenli rastgele baytlar üretir. bin2hex() ile bu baytları onaltılık bir dizeye çevirirsin; böylece çerezde ve formda kolayca taşınır.
Token'ı $_SESSION['csrf_token'] anahtarında sakla. Başarılı girişten sonra session_regenerate_id(true) çağırarak oturum sabitleme saldırısını önle. Çerez ayarlarında httponly ve samesite seçeneklerini de açmak iyi bir alışkanlıktır.
Uygulama CSRF token üret ve doğrula
random_bytes(32) ile rastgele bayt üret, bin2hex ile onaltılık dizeye çevir ve $_SESSION['csrf_token']'a kaydet. Sonra $submitted değişkenini aynı token olarak ata ve hash_equals ile doğrula; 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();
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
$submitted = $token;
echo (hash_equals($_SESSION['csrf_token'], $submitted) ? "geçerli" : "geçersiz") . "\n";
Kendini test et
-
CSRF saldırısını önlemenin en iyi yolu nedir?
- Daha uzun parola kullanmak
- Oturum tabanlı CSRF token
- HTTPS kullanmak
- JavaScript'i kapatmak
Cevabı göster
Oturum tabanlı CSRF token — Doğru. Oturuma bağlı rastgele token sahte istekleri engeller.
-
CSRF kavramlarını eşleştir
- random_bytes
- Rastgele bayt üretir
- bin2hex
- Onaltılık dizeye çevirir
- hash_equals
- Sabit süreli karşılaştırma
- $_SESSION
- Sunucu tarafı depolama
-
hash_equals çağrısını tamamla
$valid = ____($_SESSION['csrf_token'], $submitted);Cevabı göster
$valid = hash_equals($_SESSION['csrf_token'], $submitted);