ASP.Net Core Projelerinde Güvenlik- SQL Injection

Önceki yazımda ASP.Net Core projelerinde Cross-Site Request Forgery(CRSF) konusu ile ilgili uygulamalar yapmıştık.Bu yazımda ise SQL Injection konusundan bahsedeceğiz. Faydalı olması dileğiyle . 🙂

  • SQL Injection web sayfaları içerisindeki form elamanlarının içerisine SQL sorgularının yazılabilmesi anlamına gelir.
  • Web sitesinde bir sayfa düşünün, bu sayfada arama kutunuz ve arama sonuçları olsun. Arama kutusuna isim yazdırıp arattığınızda,isime göre arama gerçekleştirsin. Arama kutusundaki datayı, backend tarafında ham sql sorgusu olarak yazdıysanız (select * form şeklinde), SQL injection güvenlik açığına sebep olabilirsiniz.
  • Kötü niyetli kullanıcılar bu sorgular ile malesefki tüm veri tabanınızı çökertebilir. Bilgilerinizi silebilir. Tüm datalarınıza ulaşabilir.
  • Textboxlardan alınan değerlerin SQL sorgularına parametre olarak eklenmesi gerekir. Eğer parametre olarak eklenmezse ve ham SQL sorguları şeklinde string bir ifade dönüştürülmeye çalışılırsa SQL injection zafiyetine kapılar açılmış olur.

Haydi Örnekle Açıklayalım !

  • Kullanıcıdan aldığım Search Text parametresini aşağıdaki gibi direk SQL’e ham sorguyla eklemeye çalıştım ve aslında yapılmaması gereken bir şey yaptım.
  • SQL Server’a gelen istekleri yakalayabilmek için SQL Server Profiler oluşturmam gerekir. Bunun için New Trace alanını seçtim.
  • Sonrasında hangi Server üzerindeki sorguları dinleyeceğimi seçmem gerekir.
  • Aşağıdaki ekranda RUN demem yeterlidir.
  • Şimdi uygulamamıza geri dönelim. Ve arama butonuna “Computer” yazalım. Yazdığımızda kayıt olarak Computer olan ürünü getirdi.
  • Profiler ekranında da incelediğimde aşağıdaki gibi sorgunun geldiğini görüyoruz.
  • Kötü niyetli bir kullanıcı arama butonuna aşağıdaki gibi bir sorgu yazarak, veri tabanındaki tüm sorguları çekmeyi amaçlayabilir.
  • 1’in 1’e eşit olması ile beraber hep true döneceği için bu kısım tüm veri tabanı bilgilerini getirmiş olur.
  • “- -” ise sogudan sonraki kısımları yorum satırına dönüştür anlamına gelmektedir.

Peki bu durumdan korunmak için nasıl yazmam gerekirdi ?

  • SQL Injection zafiyetinden korunmak için aşağıdaki gibi bir sorgu kullanarak Entity Framework’u kullanmak yeterli olacaktır.

https://github.com/KardelRuveyda/ASPNetSecurity kodları Github ‘da oluşturduğum Repository’den inceleyebilisiniz.

Kaynakça