CodeBlanks Logo Icon CodeBlanks

CSRF token üretimi

PHP kursu · İleri seviye · Ders 64/92

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

  1. 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.

  2. 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
  3. hash_equals çağrısını tamamla

    $valid = ____($_SESSION['csrf_token'], $submitted);
    Cevabı göster
    $valid = hash_equals($_SESSION['csrf_token'], $submitted);

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