mavzermete 1
mavzermete
xranzei 1
xranzei
Manwe Work 1
Manwe Work
noisiv 1
noisiv
Hikaye Ekle

PHP – CSRF

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

"CSRF" kısaltması Cross-Site Request Forgery'nin kısaltmasıdır. CSRF, güvenilir bir web sitesi kullanıcısının yetkisiz komutlar vermesini içeren bir İnternet saldırısıdır. Bu saldırıya karşı bir PHP web uygulamasına yeterli koruma sağlamak, bu bölümde açıklanan önlemleri alarak sağlanabilir.

Varsayılan olarak, tarayıcı veri göndermek için "GET" istek yöntemini kullanır. Bu genellikle bir CSRF'deki istismar noktası olarak kullanılır. Belirli bir web sitesine komutlar enjekte etmek için saldırgan "IMG" gibi HTML etiketleri kullanır. Örneğin, "/delete.php?empcode=1234" gibi bir web uygulamasının URL uç noktası, bir GET isteğinin empcode parametresinden geçirilen hesabı siler. Şimdi, kimliği doğrulanmış bir kullanıcı başka bir uygulamada aşağıdaki betiğe rastlarsa:

<img src=" "
width="0" height="0" border="0">

İstemsizce empcode=1234 ile ilgili verilerin silinmesine neden olur.

Bu sorun için yaygın bir geçici çözüm CSRF belirteçlerinin kullanılmasıdır. CSRF belirteci, bir web uygulamasının normal iş akışına göre beklenen bir kaynaktan bir istek alındığına güvenebilmesi için isteklere gömülmüş rastgele karakterlerden oluşan bir dizedir.

CSRF'yi Uygulama Adımları

PHP'de CSRF belirteç korumasını uygulama adımları aşağıdaki gibidir:

  • Yeni bir oturum başlatarak senaryoyu başlatın.
  • Rastgele karakterlerden oluşan bir belirteç üretin. PHP'nin rastgele dize üretimi için sağladığı çeşitli yerleşik işlevlerden herhangi birini kullanabilirsiniz. Benzersiz bir rastgele dize üreten uniqueid() işlevinin karma değerini elde etmek için md5() işlevini kullanalım.
  • Kullanıcının veri göndermesi için sağlanacak HTML formunun içerisine, yukarıdaki adımda oluşturulan rastgele token değerini içeren gizli bir dosya ekleyin.
  • Form gönderildikten sonra token, kötü amaçlı istekleri ortadan kaldırmak için sunucu tarafından kullanıcı oturumuna göre doğrulanabilir.
  • Ayrıca değeri geçerli zaman olan başka bir oturum değişkeni ekleyebilir ve doğrulama amacıyla bir son kullanma tarihi gönderebilirsiniz.

Örnek

İşte CSRF token doğrulama mekanizmasını uygulayan PHP kodu. Aşağıdaki betik bir token üretir ve bir HTML formuna gömer.

PHP:
<?php
   session_start();
   if(!isset($_SESSION["csrf_token"])) {
  
      // No token present, generate a new one
      $token = md5(uniqid(rand(), true));
      $_SESSION["csrf_token"] = $token;
      
   } else {
  
      // Reuse the token
      $token = $_SESSION["csrf_token"];       
   }
?>
<html>
<body>
   <form method="get" action="test.php">
      <input type="text" name="empcode" placeholder="empcode" />
      <input type="hidden" name="csrf_token" value="<?php echo $token;?>" />
      <input type="submit" />
   </form>
</body>
</html>

Form aşağıdaki gibi "test.php" betiğine gönderilir:

PHP:
<?php
   session_start();
   echo "hello";
   if ($_GET["csrf_token"] == $_SESSION["csrf_token"]) {

      // Reset token
      echo $_GET["csrf_token"] . "<br>";
      echo $_SESSION["csrf_token"] . "<br>";
      echo "<h3>CSRF token validation successful. Proceed to further action</h3>";
   } else {
      echo "<h3>CSRF token validation failed</h3>";
   }
?>

Aşağıdaki çıktıyı üretecektir:

php_csrf.jpg

CSRF doğrulamasının başarısızlığını simüle etmek için tarayıcının inceleme aracını açın, gizli alandaki değeri elle düzenleyin ve belirteçlerin eşleşmediğini ve doğrulama başarısızlığına yol açtığını görmek için formu gönderin.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst