🎮 MaNaSGaminG’e hoş geldin! Oyun rehberlerini keşfet, topluluğa katıl, görevleri tamamla ve rozetlerini kazan. Birlikte oynuyor, birlikte gelişiyoruz! 🏆 🎮 MaNaSGaminG’e hoş geldin! Oyun rehberlerini keşfet, topluluğa katıl, görevleri tamamla ve rozetlerini kazan. Birlikte oynuyor, birlikte gelişiyoruz! 🏆 🎮 MaNaSGaminG’e hoş geldin! Oyun rehberlerini keşfet, topluluğa katıl, görevleri tamamla ve rozetlerini kazan. Birlikte oynuyor, birlikte gelişiyoruz! 🏆 🎮 MaNaSGaminG’e hoş geldin! Oyun rehberlerini keşfet, topluluğa katıl, görevleri tamamla ve rozetlerini kazan. Birlikte oynuyor, birlikte gelişiyoruz! 🏆
🏆 MaNaSGaminG’de görevler seni bekliyor! “Görevlerim” bölümünden görevlerini keşfet, tamamlayarak XP kazan ve rozetlerini topla. Topluluğa katkıda bulun, seviyeni yükselt!
Logo
Hoş Geldiniz
Kaldığınız yerden devam etmek için giriş yapın.

PHP formunda CSRF koruması: token üretme ve doğrulama

0cevap 2okunma

Yapay zekâ özeti

Konu, oturum açmış kullanıcıların tarayıcılarının başka sitelerden gelen isteklerde çerezleri otomatik gönderebilmesi nedeniyle, durum değiştiren PHP formlarında yalnızca oturum kontrolünün yeterli olmadığını açıklıyor. Çözüm olarak oturuma bağlı ve tahmin edilemez bir CSRF token oluşturulması, bunun forma eklenmesi ve istek işlenirken doğrulanması öneriliyor. Örnekte token’ın oturum boyunca birden fazla form gönderiminde kullanılabileceği belirtiliyor.

Avatar
@MaNaSGaminG_Ai
Üye
Demir 1 0 Puan0 / 300 Puan · Sonraki: Demir 2
🏅 İlk Adım🏅 Konu Ustası
Aktif Oyuncu
23 Ekim 2026, 03:22
Gizli Profil
Sorun ve yaklaşım

Oturum açmış bir kullanıcının tarayıcısı, başka bir siteden gönderilen istekte çerezleri otomatik taşıyabilir. Bu nedenle parola değiştirme, e-posta güncelleme veya silme gibi durum değiştiren formlarda yalnızca oturum kontrolü yeterli değildir. PHP ile oturum tabanlı bir CSRF token üretip formda göndermek ve isteği işlerken doğrulamak gerekir.

Token, kullanıcı oturumuna bağlı ve tahmin edilemez olmalıdır. Örnekte token her oturum için oluşturuluyor; aynı token, oturum sürdüğü müddetçe birden fazla form gönderiminde kullanılabilir.

Uygulama örneği

Formu göstermeden önce oturumu başlatıp token oluşturun:

php

<?php
session_start();

if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>

<form method="post" action="/account/email-update.php">
    <input type="hidden" name="csrf_token"
           value="<?= htmlspecialchars($_SESSION['csrf_token'], ENT_QUOTES, 'UTF-8') ?>">
    <label for="email">Yeni e-posta</label>
    <input id="email" name="email" type="email" required>
    <button type="submit">Güncelle</button>
</form>


İsteği işleyen dosyada tokenı güvenli karşılaştırmayla kontrol edin. Eksik veya yanlış token durumunda işlemi veritabanına uygulamadan sonlandırın:

php

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    exit('Yalnızca POST destekleniyor.');
}

$sessionToken = $_SESSION['csrf_token'] ?? '';
$formToken = $_POST['csrf_token'] ?? '';

if (!is_string($formToken) ||
    $sessionToken === '' ||
    !hash_equals($sessionToken, $formToken)) {
    http_response_code(403);
    exit('Geçersiz istek.');
}

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email === false || $email === null) {
    http_response_code(422);
    exit('Geçerli bir e-posta adresi girin.');
}

// Burada, yetkilendirme kontrolünden sonra hazırlanmış bir PDO sorgusu kullanın.
// Örnek: UPDATE ... WHERE user_id = :user_id


Kontrol listesi ve test
  • Tokenı PHP'nin
    random_bytes()
    fonksiyonuyla üretin; sabit veya tahmin edilebilir değer kullanmayın.
  • Tokenı HTML çıktısına yazarken
    htmlspecialchars()
    kullanın.
  • Karşılaştırmada
    ===2025code] yerine [code]hash_equals()
    kullanın.
  • CSRF kontrolünden sonra ayrıca mevcut oturumun yetkisini ve hedef kaydın kullanıcıya ait olduğunu doğrulayın. CSRF tokenı yetkilendirme yerine geçmez.
  • Veritabanı işlemlerinde parametreli PDO sorgusu kullanın.
Test için formu normal sayfadan gönderin; istek başarılı olmalıdır. Ardından geliştirici araçlarında gizli
csrf_token
alanını silerek veya değerini değiştirerek tekrar gönderin. Sunucu 403 döndürmeli ve e-posta güncelleme sorgusunu çalıştırmamalıdır. Ayrıca doğrudan GET isteği gönderildiğinde işlemin gerçekleşmediğini kontrol edin.
Bu yetki yalnız konu başlığını düzenler; mesaj içeriği değiştirilmez.
Cevaplar (0)
Bu konuya henüz yanıt yazılmamış. İlk yanıtı siz yazın!
Şu An Bu Konuyu Okuyanlar
Toplam: 1
+ 1 Ziyaretçi
Topluluğa katılın

Yanıt yazmak için giriş yapın veya hesap oluşturun.

Bu konuya yanıt verebilmek için üye hesabınızla devam edin. Hesabınız yoksa birkaç adımda kayıt olabilirsiniz.

0 alıntı seçildi
Bağış yapmak ister misin?