Üye Girişi
 
Şifremi unuttum | Kayıt ol
 
Beni Haberdar Et
       
 
Sayaç
Şu an bağlılar
3
 
Bugün gelenler
88
 
Toplam Ziyaretçi
25746
 
 
Özgürlük İçin !
Pardus... Özgürlük İçin...
 
 
PHP VE CSRF AÇIĞI

Açılımı Cross-site request forgery olan bu açık sayesinde açığı barındıran site üzerinde kullanıcı girişi yapmış kişilere farkında olmadan makale sildirtebilir, ekletebilir, sahte form gönderileri yaptırabiliriz. Tabii iş bunlarla sınırlı değil, gerisi hayal gücü ve kurnazlığınıza kalmış.

Bilgilendirme kısmını geçerek teknik anlatım bölümüne geçebiliriz.

 

AÇIĞIN KULLANIM BİÇİMİ

Örnekteki kurbanımız x kullanıcısının web sitesinde yer alan yönetim panelinde ki makalelerden birini sildirmeye kararlıyız. x kullanıcısının makale silme işlemini yapan bağlantının ise şu şekilde olduğunu varsayalım : www.orneksite.com/panel/makalesil.php?id=123

Saldırganın bu adresi bilmesine gerek yok. Sadece sildirmek istediği makalenin ID'sini bilmesi yeterli. (123)

Örneğin saldırgan kısmına geçerlim; saldırganımız bir site hazırlıyor (veya daha önce var olan bir site). Sitenin içinde herhangi bir yere şu kodu koyuyor:  <img src="http://www.orneksite.com/panel/makalesil.php?id=123" >

Daha sonra sldırganımız bir şekilde kurbanı bu kodun olduğu sayfaya girmeye ikna ediyor. Ama, kurban bu siteye girerken daha öncesinde kendi panelinde oturum açmış olmalı, yoksa saldırı bir işe yaramaz. İşte bütün işlem bu noktada başlıyor.

Kurbanımız siteyi ziyaret ettiğinde ID'si 123 makale silinmiş oluyor. Nedeni ise, img tagı içerisinde yer alan adres arkaplanda açılıyor. Açılan bu sitede yeni bir kontrol mekanizması çalışmıyor çünkü zaten daha önceden bu siteye giriş yapılıp bir oturum oluşturulmuş.

 

AÇIĞIN ENGELLENME BİÇİMİ

Açığın engellenme biçimi aslında oldukça basit. Kurbanımızın kodlarında biraz oynama yapması gerekiyor. Her GET ve POST isteklerinde tek kullanımlık bilet veya jeton(token) oluştuması gerekiyor. Kurbanımız makalesil.php sayfasına aşağıdaki şu kodları eklemiş olsaydı, bu saldırının zararını görmeyecekti.


if( isset($_GET['id']) && $_GET['bilet'] == $_SESSION['token']){

// silme işlemi


}

$token= md5( uniqid( rand(), true) );
$_SESSION['token'] = $token ;


<a href="?id=123&bilet=<?php print $_SESSION['token']; ?>">Makaleyi sil</a>

Burada yaptığım şey her isteğe yeni ve tanımsız bir jeton(token) oluşturmamdır. Saldırganımız bu karakterleri bilemeyeceğinden, ve sistem de adres çubuğunda bu karakterler olmadan işlem yapmayacağından saldırı başarısızlıkla sonuçlanacaktır.

Adres satırında GET metodu ile kullanılan bu yöntem formlarda da kullanılabilir. Bunun için kullanıcıların kaynak koduna bakmadan göremeyceği bir gizli bir input kutusu eklemeliyiz.

if( $_POST['sub'] && $_POST['token'] == $_SESSION['token']){

// makale ekleme işlemleri v.s.


}

$token= md5( uniqid( rand(), true) );
$_SESSION['token'] = $token ;


<form action="" method="post">
<input type="text" name="metin" value="" />
<input type="hidden" name="token" value="<?php print $token; ?>" />
<input type="submit" value="Ekle" name="sub" />
</form>
 
18/03/2010 - Bu sayfa 257 kez görüntülenmiştir.
 
Sayfa etiketleri : csrf açığı , security token ,
 
                           


    


Ziyaretçi... yorum yazıyor
 




Arama
              
 
Etiketler
aynı  
dizin  
atama  
PHP_SELF  
XSS  
sanal kart  
sanal  
oluşturma  
sağlamak  
Windows  
Javascript  
 
 

 

Anket
Hangi tarayıcıyı kullanıyorsunuz ?
 Chrome
 Firefox
 Internet Explorer
 Opera
 Safari
 

Kuark7