SQL Enjeksiyonu Nedir?
İngilizce: SQL Injection
Yayın: · Son güncelleme:
SQL Enjeksiyonu Nedir? Kısaca
SQL enjeksiyonu (SQL injection), bir web uygulamasının kullanıcıdan aldığı veriyi denetlemeden veritabanı sorgusuna eklemesi sonucu saldırganın veritabanında izinsiz sorgu çalıştırabildiği bir güvenlik açığıdır.

İçindekiler
SQL enjeksiyonu nedir?
SQL, web sitelerinin veritabanlarıyla konuşmak için kullandığı dildir. Giriş formu, arama kutusu ya da ürün sayfası arka planda bir SQL sorgusu çalıştırır. SQL enjeksiyonu, uygulamanın kullanıcıdan gelen metni güvenli biçimde işlemeden bu sorguya doğrudan eklemesiyle ortaya çıkar. Bu durumda kullanıcı girdisi, veri olarak değil komut olarak yorumlanabilir.
Bu açık, OWASP Top 10 listesinde "enjeksiyon" başlığı altında yıllardır yer alan en bilinen web zafiyetlerinden biridir.
Neden tehlikelidir?
Başarılı bir SQL enjeksiyonu saldırganın veritabanındaki bilgileri okumasına, değiştirmesine ya da silmesine yol açabilir. Müşteri adları, e-posta adresleri, şifre özetleri ve sipariş bilgileri risk altına girer. Bazı durumlarda giriş ekranı şifre olmadan aşılabilir.
Örneğin küçük bir online mağazanın arama kutusunun bu açığı taşıdığını düşünün. Açık kullanıldığında binlerce müşterinin iletişim bilgileri dışarı çıkabilir. Mağaza hem müşterilerini bilgilendirmek hem de kişisel veri ihlali yükümlülüklerini yerine getirmek zorunda kalır.
Geliştiriciler nasıl önler?
En etkili yöntem, parametreli sorgular (hazır ifadeler) kullanmaktır. Bu yaklaşımda sorgunun yapısı ile kullanıcı verisi birbirinden ayrı gönderilir ve veritabanı girdiyi hiçbir zaman komut olarak çalıştırmaz. Diğer önlemler şunlardır:
- Güvenilir bir ORM ya da veritabanı kütüphanesi kullanmak
- Uygulamanın veritabanı hesabına yalnız gereken yetkileri vermek
- Girdi doğrulama ve web uygulama güvenlik duvarıyla ek katman eklemek
Site sahipleri ne yapmalı?
Hazır bir site altyapısı kullanıyorsanız çekirdek yazılımı ve eklentileri güncel tutun. Özel yazılım yaptırıyorsanız geliştiriciden parametreli sorgu kullanıldığına dair güvence isteyin ve yayın öncesi bir güvenlik testi yaptırın.
Sıkça Sorulan Sorular
SQL enjeksiyonu hâlâ yaygın mı?
Modern yazılım çerçeveleri riski azaltmış olsa da eski ya da özensiz yazılmış uygulamalarda hâlâ görülür. Bu yüzden güvenlik testlerinde ilk kontrol edilen açıklardan biridir.
SQL enjeksiyonunu önlemenin en iyi yolu nedir?
Parametreli sorgular kullanmaktır. Kullanıcı verisi sorgudan ayrı gönderildiğinde veritabanı onu komut olarak yorumlamaz.