Sql injection nedir ? nasıl yapılır?

ergin (2539) 11 yıl önce sordu

Sql injection nedir ? nasıl yapılır?

Sql injection’dan korunma yolları nelerdir?

Toplam 1 cevap


ergin (2539) 11 yıl önce cevapladı

Sql injection, Sql sorgularının arasına dışarıdan müdahale de bulunarak, veri ekleme işlemine verilen genel isimdir. Web uygulamalarında kullanıcılar tarafından girilen veriler ile dinamik Sql cümleleri oluşturulur. Bu cümleler oluşturulurken araya giren herhangi bir meta-karakter Sql injection’a neden olabilmektedir.

Meta-karakter; bir program için özel anlam ifade eden karakterlere verilen isimdir. Mesela JAVA'daki “\” bir meta-karakterdir ve derleyici ya da yorumlayıcı bu karakteri gördüğünde ondan sonra gelen karakteri bu meta-karaktere göre işler. Sql için ise meta-karakter " ‘ " (tek tırnak) ve " ; " (noktalı virgül) dür.

Sql injection Nasıl Yapılır?
Örneğin, en çok kullanılan yöntem bir sisteme Kullanıcı Adı ve Parola ile giriş yaparken kullandığımız yöntemdir.

select * from Uzmanim
where KullaniciAdi = 'uzman' AND Parola = 'uzmanim'


Verileri girdikten sonra yukarıdaki şekilde bir Sql cümlesi oluştururuz. Eğer veritabanında böyle bir kayıt varsa Sql cümlesi o kaydı döndürür ve sisteme giriş sağlanır. Eğer kayıt yoksa kullanıcıya hata mesajı gösteririz.

 

Bu örnek Sql kodu klasik bir oturum açma yöntemidir. Bu örnek üzerinde basit bir sql injection deneyelim. Öncelikle KullaniciAdi yerine " ‘ or 1 = 1 " , Parola yerine ise " ‘ or 1 = 1 " girelim. bakıyoruz ki sisteme giriş yapımışız. Şimdi koda yakından bakarak nasıl olduğunu inceleyelim. Girdiğimiz değerleri  Sql kodunda yerlerine koyarsak karşımıza şu şekilde bir kod çıkar.

select * from Uzmanim
where KullaniciAdi = ' ' or 1 = 1 ' and Parola = ' ' or 1 = 1 '


Sql kodumuzda da görüldüğü gibi bu Sql cümlesi şu şekilde yorumlanacaktır. Uzmanim  tablosundan KullaniciAdi alanı boş olanlar ve Parola alanı boş olanları getir veya 1 eşittir 1 olanları getir. Bu Sql cümlesi her zaman doğru dönecek ve Uzmanim tablosundan tüm üyeleri listeleyecektir. Çünkü ilk kontrole bakmaksızın son kontrol (1 eşittir 1 kontrolü) her zaman doğru sonuç verecek ve Sql cümlesi çalışıp, Uzmanim tablosundan tüm üyeler listelenecektir. Böylece dönen kayıtlardaki ilk kullanıcı olarak giriş yapmış olucaksınız. Görüldüğü gibi Sql injection;  Sql cümlelerinin arasına dışarıdan müdahale yapılmasına imkan sağlayıp Sql'i istediğiniz şekilde değiştirmenize izin vermektedir.

Sql injection’dan nasıl korunabiliriz?

Sql injection’ın temel nedenlerinden birisi web uygulamalarının kullanıcılardan aldığı verileri kontrol etmeden, gerekli filtreleme işlemini yapmadan verileri alıp Sql cümlesi oluşturmasıdır. Bu açık yakalandığında müdahalede bulunmak için " ‘ " (tek tırnak) karakteri ile girdiye başlanır ve bunun sonucunda Sql’e istenilen komutu göndermek için tek tırnak yardımıyla string bölümünden kaçınılabilir.

Bunun gibi veya daha farklı yollardan müdahaleler de bulunulursa ulaşılmasını istemediğimiz veriler yabancı kişiler tarafından ele geçirilebilir. Buna izin vermemek için yapmamız gereken en önemli kurallar;

  • Tüm meta-karakterlerden kaçınılmalıdır. Kullanıcıdan alınan verilerde bu karakterlerin olup olmadığını anlamak için filtreleme işlemi yapmalıyız.
  • Sayısal olarak beklenen girdilerin sayısal olup olmadığı kontrol edilmelidir. Sayısal olan girdiler Sql sorgusuna eklemeden önce integer’a çevirmek veya ISNUMERIC fonksiyonunu kullanarak gerçekten integer olup olmadığını kontrol edilmelidir.