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