SQL Injection Nedir?
SQL Injection, web uygulamalarında güvenlik açığı olarak bilinen bir saldırı türüdür. Bu saldırıda, kullanıcı tarafından sağlanan verilerin doğru bir şekilde işlenmediği veya filtrelenmediği durumlar söz konusudur.
SQL Injection genellikle kullanıcı giriş formaları, arama alanları veya veri tabanı sorgularının oluşturulduğu herhangi bir yerde ortaya çıkabilir. Saldırganlar, SQL sorgularını manipüle ederek veritabanına istenmeyen sorgular göndermeye çalışır. Bu sayede saldırgan, veritabanından gizli bilgileri çalabilir, veritabanını değiştirebilir veya hatta tamamen kontrol altına alabilir.
SQL Injection Nasıl Çalışır?
Basit bir saldırı senaryosu örneği:
Saldırgan, hedef uygulamadaki bir giriş alanında şu değeri girer:
' OR 1=1;--
Bu, SQL sorgusunun sonuna enjekte edilir ve uygulama, girişi doğrulamadan veya filtrelemeden kullanır. Sonuç olarak, saldırgan, uygulamanın tüm kayıtlarını getiren bir sorguyu tetiklemiş olur. Bu şekilde, saldırgan, hedef uygulamanın veritabanını keşfedebilir ve hassas bilgilere erişebilir:' OR 1=1;--
Örnek Sorgu:
SELECT * FROM login WHERE id = '1' OR 1=1--' AND released = 1
SELECT * FROM login WHERE id = '1' OR 1=1--' AND released = 1
SQL Injection'dan Nasıl Korunulur?
SQL enjeksiyonuna karşı korunmak için aşağıdaki önlemleri almanız önemlidir:
Örnek: Güvensiz: "SELECT * FROM users WHERE username = '" + kullaniciAdi + "' AND password = '" + sifre + "';"
Güvenli: "SELECT * FROM users WHERE username = @username AND password = @password;"
Giriş Doğrulama ve Filtreleme:Kullanıcı girişlerini doğrulamak ve filtrelemek, güvenliğinizi sağlamak için önemlidir. Girişleri beklenen formatta ve veri tiplerinde doğrulayın ve zararlı karakterleri veya SQL ifadelerini engelleyin. Giriş doğrulama kütüphanelerini veya framework'lerini kullanarak güvenilir bir doğrulama işlemi sağlayabilirsiniz.Güvenli: "SELECT * FROM users WHERE username = @username AND password = @password;"
Örnek: Kullanıcı adı için sadece harf ve rakamları kabul edin, özel karakterleri reddedin.
Parola için en az bir büyük harf, bir küçük harf ve bir rakam içermesini gerektirin.
Yetkilendirme ve İzin Kontrolleri: Veritabanı yetkilendirmesini ve erişim kontrollerini doğru şekilde yapılandırın. Kullanıcıların sadece gerektiği verilere erişebileceği ve sadece yapması gereken işlemleri gerçekleştirebileceği şekilde izinleri tanımlayın. Özel veritabanı hesapları ve sınırlı yetkilere sahip kullanıcılar kullanarak saldırganların yetkisiz erişimlerini sınırlayabilirsiniz.Parola için en az bir büyük harf, bir küçük harf ve bir rakam içermesini gerektirin.
Örnek:Veritabanı kullanıcısı, yalnızca gerekli tablolara erişim iznine sahip olmalıdır.
Sadece okuma işlemleri gerektiren kullanıcılar için sadece SELECT izinlerini verin.
En Az Ayrıntı İle Hata Mesajları Gösterme: Hata mesajları, potansiyel saldırganlara sisteminiz hakkında bilgi sağlayabilir. Bu nedenle, kullanıcıya ayrıntılı hata mesajları yerine genel hata mesajları gösterin. Ayrıca, hata mesajlarında SQL sorgusuyla ilgili ayrıntıları ifşa etmemeye özen gösterin.Sadece okuma işlemleri gerektiren kullanıcılar için sadece SELECT izinlerini verin.
Güvenlik Duvarı (Firewall) Kullanma:Bir güvenlik duvarı (firewall) kullanarak gelen veri trafiğini izleyebilir ve filtreleyebilirsiniz. Özellikle saldırganların SQL enjeksiyonu saldırılarına karşı girişleri engellemek için web uygulama güvenlik duvarı (WAF) kullanmanız önemlidir.Güncellemeleri ve Yama Sürümlerini Takip Etme: Veritabanı yönetim sistemini (DBMS) ve kullanılan kütüphaneleri düzenli olarak güncelleyin. Güncellemeler, potansiyel güvenlik açıklarını gidermeye yardımcı olur. Ayrıca, yazılım sağlayıcıların yayınladığı güvenlik yamalarını da düzenli olarak takip edin ve uygulayın.
Veritabanı Ayarlarını Sıkılaştırma: Veritabanı sunucusunun güvenlik ayarlarını sıkılaştırın. Standart kullanıcı adı ve parolalarını değiştirin, varsayılan portları değiştirin ve gereksiz hizmetleri devre dışı bırakın. Veritabanı sunucusuna fiziksel veya ağ tabanlı erişimi sınırlamak için uygun ağ güvenlik önlemlerini alın.
Güvenlik Denetimleri ve Testleri: SQL enjeksiyonu ve diğer güvenlik açıklarını tespit etmek için düzenli güvenlik denetimleri ve penetrasyon testleri gerçekleştirin. Bu testler, sisteminizin zayıf noktalarını tespit etmenizi ve düzeltici önlemler almanızı sağlar.


