İpucu

Merhabalar. 

Veritabanı kullanarak geliştirdiğimiz uygulamaların en büyük tehditlerinden biri SQL injectiondır. Bu konu hakkında sizlere bilgi vermek istedim.

SQL injectionı kullanıcı girişinde şu şekilde gerçekleyebiliriz.

"select * from musteriler where sifre='" + TxtSifre.Text + "' and mail ='" + TxtMail.Text + "'"  

sorgumuzun sonuna ‘or 1=1 yazdığımızda sql bu sorguyu şöyle yorumlayacaktır:

Textboxlardan gönderilen parametreler doğru ise yada (or) 1=1 ise bu sorgu çalışacakır. 1=1 doğru olduğu için kullanıcı girişi gerçekleşecektir. Bu bizim istemediğimi bir durumdur. Bu tehlike QueryString ve veri girişi yapılan her yerde mevcuttur.

Bir örnek daha vermek gerekirse yine  bir textboxtan

 

 ‘;Delete table tabloadi;-- 


şeklinde bir giriş yapılırsa veritabanımızdan tablomuz silinebilir. Bu kodda ki tek tırnak (‘) kodumuzun içerisindeki sqli bitirip sonuna ; ile istediğimiz Sql sorgusunu göndermemize yarar.

 

Sql injection dan korunmak için basit birkaç önlem almak mümkündür.

 

  • 1.    WebConfig dosyasında connectionString i encrypt etmek.
  • 2.    Veritabanına bağlanıp sorgu gönderilen kullanıcı için minimum yetkilendirme yapmak
  • 3.    Sa kullanıcısını veritabanında asla kullanmamak
  • 4.    QueryStringden gönderilen id gibi parametreleri integer tipine çevirmek.
  • 5.    Kesinlikle kod içerinde sql sorgularında parametre kullanmak.
  • 6.    Exception mesajlarını göstermemek
  • 7.    Textboxlardan girilen verilerin içerisndeki ‘ or ‘ gibi textleri temizlemek

88    Herkese iyi çalışmalar dilerim.