Php ile form güvenliği içi CSRF (Cross-Site Request Forgery) token kullanımı

CSRF (Cross-Site Request Forgery) token kullanarak web formlarının güvenliğini artırabilirsiniz. CSRF token, bir formun gönderildiğinde kullanılan bir anahtardır ve formun geçerli bir isteğin parçası olduğunu doğrular. Bu sayede, formlarınız üzerinden yapılan sahte istekler engellenir ve web sitenizin güvenliği artar. PHP dilinde CSRF token kullanımı aşağıdaki gibidir:

<?php
  // CSRF token oluşturun
  $csrfToken = bin2hex(random_bytes(32));
  
  // CSRF token'ı oturum verilerinde saklayın
  $_SESSION['csrf_token'] = $csrfToken;
  
  // Formu oluşturun ve CSRF token'ı form verilerine dahil edin
  echo '<form method="POST" action="form_action.php">';
  echo '<input type="hidden" name="csrf_token" value="' . $csrfToken . '">';
  echo '<label for="first_name">Adınız:</label>';
  echo '<input type="text" id="first_name" name="first_name">';
  echo '<label for="last_name">Soyadınız:</label>';
  echo '<input type="text" id="last_name" name="last_name">';
  echo '<input type="submit" value="Gönder">';
  echo '</form>';
?>

Bu kod parçacığı, bir form oluşturarak CSRF token’ı form verilerine dahil eder. Form gönderildiğinde, form verileri ile birlikte CSRF token’ı da gönderilir. Form işleme sayfasında, CSRF token’ın geçerliliğini kontrol edebilirsiniz. Örneğin, aşağıdaki kod parçacığında CSRF token’ın geçerliliği kontrol edilmiştir:

<?php
  // Form verilerini alın
  $firstName = $_POST['first_name'];
  $lastName = $_POST['last_name'];
  $csrfToken = $_POST['csrf_token'];
  
  // CSRF token'ın geçerliliğini kontrol edin
  if (hash_equals($csrfToken, $_SESSION['csrf_token'])) {
    // CSRF token doğru, form işlemeye devam edin
    // (örneğin, veritabanına verileri kaydedin)
  } else {
    // CSRF token yanlış, hata mesajı gösterin
    echo 'Güvenlik doğrulaması başarısız.';
  }
?>

Bu kod parçacığı, form gönderildiğinde gelen CSRF token’ın geçerliliğini kontrol eder. Eğer CSRF token doğru ise, form işlemeye devam edilir. Eğer CSRF token yanlış ise, bir hata mesajı gösterilir. Daha detaylı bir örnek için, aşağıdaki kod parçacığını düzenleyebilirsiniz:

<?php
  // Form verilerini alın
  $firstName = $_POST['first_name'];
  $lastName = $_POST['last_name'];
  $csrfToken = $_POST['csrf_token'];
  
  // CSRF token'ın geçerliliğini kontrol edin
  if (hash_equals($csrfToken, $_SESSION['csrf_token'])) {
    // CSRF token doğru, veritabanına verileri kaydedin
    $db = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'password');
    $query = "INSERT INTO users (first_name, last_name) VALUES (:first_name, :last_name)";
    $stmt = $db->prepare($query);
    $stmt->execute(array(
      ':first_name' => $firstName,
      ':last_name' => $lastName
    ));
    
    // Başarı mesajı gösterin
    echo 'Verileriniz kaydedildi.';
  } else {
    // CSRF token yanlış, hata mesajı gösterin
    echo 'Güvenlik doğrulaması başarısız.';
  }
?>

Yorum yapın