6 Ocak 2015 Salı

SQL Injection Nedir, Nasıl Korunuruz?



SQL Injection, bilindiği gibi veritabanı bağlantısı olan projelerde bulunan bir yapıdır. Bunu göstermek için bir web projesi üzerinde uygulamasını ve bu yöntemden nasıl korunabiliriz bunu gösteren bir çalışmadır. Asp.net yapısı ile oluşturulan web sayfası Visual Studio kullanılarak C# kodlanarak gerçekleşmiştir. Açık olduğu bizzat test edilip ardından bundan nasıl korunmak için nasıl bir kodlama yapmamız gerektiği üzerinde durulmuştur.


Veritabanımız hazırlanır. Ardından Web Sayfamızın tasarımı hazırlandıktan sonra ilgili kodlamalar yapıldıktan sonra artık SQL Injection nedir nasıl gerçekleştirilir gösteririz. Sonrasında ise bu durumu engellemek adına yapılması gereken kodlamları düzenleriz.

Tablo Oluşturma
SQL Injection üzerine konuşabilmemiz için veritabanı içeren bir uygulama yazmamız gerekmektedir. Bunun için SQL tarafına gidip bir veritabanı oluşturmamız gerekir. Veritabanı oluştururken MSSQL kullanacağız. Veritabanımızın ismi LoginDB olsun ve içerisine Kullanici isminde bir tablo ekleyelim. Tablomuzun içerisinde Id, kullanici ve sifre gibi kolonlarımız bulunsun. İlgili kolonları belirlerken girilecek olan türlere uygun veri tiplerini belirtmemiz gerekecektir. İçerisine birkaç tane kayıt girelim. Kayıt girme işleminde MSSQL ara yüzünü kullanarak kayıt girebileceğimiz gibi direkt olarak SQL sorgu cümleciği olan insert into Kullanici values(değerler) yapısını da kullanabiliriz.







Web Sayfasının Tasarımı
SQL yapısını oluşturduktan sonra Visual Studio kullanarak web sayfamızın tasarımın yapalım. Bunun için sayfamıza iki tane label iki tane textbox ve label ekleyelim. Login olma işlemini denetleyeceğiz. İlgili kontroller koyulduktan sonra istersek bu web formun tasarımı için CSS ekleyebiliriz.














Kullanıcı adını ve şifresini girdiğinde ne iş yapmasını istiyorsak programatik olarak bunu buttonun arkasına kodlamamız gerekir. Bunun için projenin .cs uzantılı dosyasına geçiş yapmamız gerekecektir. Şimdi buttona çift tıklandığında neler olacağını denetleyelim.


Öncelikle veritabanına bağlanacak ve ilgili bilgileri denetleyip böyle bir kullanıcı var mı diyecek bakacak eğer böyle bir kullanıcı varsa sisteme girişi sağlanırken kullanıcının olmaması durumunda hata verip programı kapatacak. Veritabanı ve programı bağlamak adına Ado.Net teknolojisi kullanıyor olacağız. Bunun için aşağıdaki kodlar yazılır.


Kodlara bakıldığında öncelikle bağlantı nesnesi oluşturulur. Bunun data source, database gibi bilgileri verilir. Ardından SqlCommand nesnesi oluşturulup ilgili SQL cümleciği ve bağlantısı belirtilir. Oluşturalan baglanti nesnesi açılır, komut çalıştırılır ve gelen kullanıcıyı kaydetmek adına session kullanılır. Session içerisine o bilgi yani string olarak tablodaki kullanici kolonunda bulunan bilgi atanır.

Başka bir webform hazırlanıp eğer bilgileri doğruysa main.aspx diye bir sayfa yönlendirme yapılır. Kullanıcı Login sayfasında iken kullanıcıAdı ve Sifre kısmına aşağıdaki bilgileri girersek SQL Injection’a maruz kalırız.





Bilgilerinizi yazıp tekrar giriş buttonuna tıklarsa main.aspx olan sayfayı görebilecektir. Görmüş olduğumuz gibi bu sistemde SQL Injection açığı vardır. Burada böyle bir kullanıcı var mı diye bakacak textboxlara girilen değerler doğru olduğu için veritabanı tarafındaki ilk kayıtla girmesi sağlanacaktır. Dolayısıyla tabloda ilk kayıt adminse sisteme admin olarak giriş yapılmış olacağız. Bunu önlemek içinse mümkün olduğunca parametre içeren yapılar verilerek sisteme giriş denetlenirse SQL Injection’dan korunmuş oluruz.



Parametre içeren bir SQL cümleciği yazdığımız için dolayısıyla SQL Injection kullanılamıyor olacaktır. p1 ve p2 parametreleri komut nesnesinin içerisine ayrıca entegre edilmiştir. Dolayısıyla bu açıktan korunmuş oluruz.


SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...