En çok rastlanan güvenlik açıklarına bir göz atalım:

  1. SQL Injection
    SQL cümlesi içerisine parametre olarak gönderilen değişkenin saldırgan tarafından değiştirilerek gönderilmesiyle oluşan açıktır.
  2. Session Fixation
    O an siteye giriş yapmış ziyaretçinin session id’sini bir şekilde alarak ziyaretçinin aktif session’ından yararlanma felsefesine dayalı bir güvenlik açığıdır.
  3. Session Poisoning
    Programcının gönderilen parametreleri kontrolsüz bir şekilde session değişkenlerine ataması nedeniyle oluşan açıktır.
  4. XSS (Cross Site Scripting)
    Saldırganın sayfaya bir açıktan yararlanarak javascript, css, html kodu yazabilmesi nedeniyle oluşan açıktır.
  5. XSRF (Cross Site Request Forgery)
    Saldırganın o an siteye giriş yapmış ziyaretçiye farkında olmadan istediği aksiyonu yaptırması ile ilgili bir güvenlik açığıdır.
  6. RFI (Remote File Inclusion) ve LFI (Local File Inclusion)
    Programcının gönderilen parametreleri kontrolsüz bir şekilde çalışan koda “include” etmesi nedeniyle oluşan bir güvenlik açığıdır.
  7. Referrer Spoofing
    HTTP_REFERER ziyaretçinin bir önce ziyaret ettiği sayfayı tutan bir environment değişkenidir. Ancak bu değişken istemci tarafından gönderildiği için bu değişkene dayanarak yapılan güvenlik kontrolleri kolayca aşılabilir.
Tags:
This post has 2 comments. Add your own.
ahmet - 08 Oct 07 at 11:43:53

HTTP_REFERRER güvenli değil madem bununla ilgili bir sorum olacak:

A sayfasını kullanarak B sayfasından veri çekiyorum. Fakat B sayfasına yalnızca A sayfasının ulaşabilmesini istiyorum. Başka hiçbir kimsenin veya dış uygulamanın B sayfasına ulaşmasını istemiyorum. HTTP_REFERRER kontrolü dışında bunu nasıl yapabiliriz?

M.Ozan Hazer - 08 Oct 07 at 12:41:29

A ve B sayfaları aynı sitedeyse session işinizi görecektir. A sayfasında bir session değişkenine bir key atayın, sonra B’yi çağırırken o key’i de gönderin, B dosyasının içinden session değişkeni ile gönderilen key’i karşılaştırın.

A ve B ayrı sitelerdeyse işler biraz karışıyor. Ana mantık yine aynı, bir key göndereceksiniz, sonra onu kontrol edeceksiniz. Bu key’in kötü niyetli kişiler tarafından taklit edilememesi gerekli. Tek yönlü encryption algoritmalarından birini de devreye sokmanız lazım.

İlk aklıma gelen klasik PKI yapısı: Bir tane herkesin görebileceği anahtar kelime (public key) ve bir tane de sadece sizin ulaşabileceğiniz bir özel anahtar kelime (private key) düşünün.

Public key + private key bileşimini tek yönlü encryption’dan çıkan sonucu (hash) ve public key’i B sayfasına göndereceksiniz. Sonra B dosyasının içinde yine private + public key’i aynı algoritmadan geçirip çıkan sonucun gönderilen hash ile aynı olup olmadığını kontrol edeceksiniz.

Tek yönlü algoritma olarak md5 ya da sha1 kullanabilirsiniz.
Dikkat etmeniz gereken public key’in her seferinde farklı olması.
Ayrıca public key ve private key ne kadar uzun olursa, kullanılan algoritma da ne kadar uzun olursa deneme yanılma ile bulunma ihtimali o kadar düşer. Mesela sha1 md5′ten daha güçlüdür.

Public ve private key’i yanyana koymak yerine atıyorum “private’ın 3. karakterinden sonra araya public key’i sıkıştır, ondan sonra algoritmayı uygula” gibi işleri karıştırıcı önlemlerle paranoyaklığın sınırlarını istediğiniz kadar zorlayabilirsiniz :)