Ana icerigi atla

SQL Injection Nedir? Nasıl Önlenir? Kapsamlı Rehber

Siber Güvenlik2 Nisan 2026

SQL Injection, web güvenliğinin en eski, en yaygın ve hâlâ en yıkıcı saldırı türlerinden biridir. 1998'de ilk kez belgelenmesine rağmen, 25 yıl sonra bile OWASP Top 10 listesinde üst sıralarda yer alıyor. Sebebi basit: birçok geliştirici hâlâ bu açığa karşı önlem almıyor ve bir SQL Injection saldırısı, bütün bir şirketin veritabanını tek komutta silip süpürebiliyor. Bu rehberde, SQL Injection'ın ne olduğunu, nasıl çalıştığını, örneklerle nasıl istismar edildiğini ve en önemlisi nasıl önleneceğini anlatıyoruz. SQL Injection Nedir? SQL Injection (kısaca SQLi), kullanıcı tarafından girilen verinin doğrulanmadan veya temizlenmeden doğrudan SQL sorgusuna dahil edilmesi sonucu oluşan bir güvenlik açığıdır. Saldırgan, normal bir giriş alanına özel SQL komutları yerleştirerek veritabanını manipüle edebilir. Pratik örnekle açıklayalım. Diyelim ki bir giriş formunuz var ve arka planda şu sorgu çalışıyor: sqlSELECT * FROM users WHERE username = 'kullanici' AND password = 'parola' Eğer kullanıcı adı ve parola alanlarından gelen veri doğrudan sorguya ekleniyorsa, saldırgan parola alanına şunu yazabilir: ' OR '1'='1 Sorgu şu hale gelir: sqlSELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1' '1'='1' her zaman doğru olduğu için, sorgu tüm kullanıcıları döndürür ve saldırgan admin olarak giriş yapar — parolayı hiç bilmeden. SQL Injection Türleri 1. Classic (In-band) SQL Injection Saldırgan sorguyu manipüle eder ve sonuçları doğrudan web sayfasında görür. En basit ve en kolay tespit edilen türdür. Union tabanlı saldırılar bu kategoriye girer — saldırgan UNION SELECT ifadeleriyle başka tablolardan veri çekebilir. 2. Blind SQL Injection Sorgu sonucu doğrudan sayfada görünmez ama uygulamanın davranışından (true/false cevapları, hata mesajları) çıkarım yapılabilir. Boolean tabanlı ve zaman tabanlı olmak üzere iki alt türü vardır. Daha yavaş ama son derece etkilidir. 3. Out-of-band SQL Injection Veritabanının harici bir sunucuya istek göndermesi sağlanarak veri sızdırılır. DNS veya HTTP istekleri üzerinden gerçekleştirilir. Daha nadirdir ama diğer yöntemlerin işe yaramadığı durumlarda kullanılır. 4. Second-order SQL Injection Zararlı girdi önce veritabanına kaydedilir, daha sonra başka bir sorguda kullanıldığında tetiklenir. Tespit edilmesi ve önlenmesi en zor türlerden biridir çünkü girdi ile saldırı arasında zaman farkı vardır. SQL Injection ile Neler Yapılabilir? Bir saldırgan başarılı bir SQL Injection saldırısı ile: Tüm veritabanındaki bilgileri okuyabilir (kullanıcı adları, parolalar, e-postalar, kredi kartı bilgileri, müşteri verileri). Verileri değiştirebilir veya silebilir (siparişleri manipüle etme, kullanıcı hesaplarını silme). Kimlik doğrulamayı atlayarak admin hesabına erişebilir. Veritabanı sunucusunda komut çalıştırabilir (bazı yapılandırmalarda, işletim sistemi seviyesinde bile). Diğer sistemlere yatay hareket edebilir (veritabanı sunucusu üzerinden iç ağa erişim). Tarihte yaşanan büyük SQL Injection saldırıları, milyonlarca kullanıcının verilerinin sızmasına, şirketlerin milyarlarca dolar zarar etmesine ve bazı durumlarda şirketlerin iflas etmesine neden oldu. SQL Injection Nasıl Önlenir? 1. Parametrik Sorgular (Prepared Statements) En etkili ve en önerilen yöntem. Parametrik sorgular, SQL komutunu ve kullanıcı verisini ayrı ayrı işler. Veritabanı sürücüsü, kullanıcı verisini hiçbir zaman komut olarak değerlendirmez. Güvensiz (PHP örneği): php$query = "SELECT * FROM users WHERE email = '$email'"; Güvenli (PDO ile): php$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); Node.js, Python, Java, .NET — her modern dilde parametrik sorgu desteği var. Kullanmamak için hiçbir teknik mazeret yok. 2. ORM Kullanımı Object-Relational Mapping (ORM) kütüphaneleri, SQL sorgularını otomatik olarak parametrik hale getirir. Prisma (Node.js), Sequelize (Node.js), SQLAlchemy (Python), Hibernate (Java), Entity Framework (.NET) gibi ORM'ler SQL Injection'a karşı yerleşik koruma sağlar. Ancak dikkat: ORM kullanırken raw query veya string concatenation yaparsanız korumayı devre dışı bırakmış olursunuz. ORM'in sağladığı sorgu builder metodlarını kullanmak şart. 3. Girdi Doğrulama (Input Validation) Kullanıcıdan gelen veriyi beklenen formatta olup olmadığını kontrol edin. E-posta alanında e-posta formatı, sayı alanında sayı, tarih alanında tarih. Beyaz liste yaklaşımı (izin verilenleri tanımlama) siyah liste yaklaşımından (yasaklananları tanımlama) çok daha güvenlidir. Ama dikkat: girdi doğrulama tek başına yeterli değildir. Parametrik sorgularla birlikte kullanılmalıdır. Ana savunma parametrik sorgular, ikincil savunma girdi doğrulamadır. 4. En Az Ayrıcalık İlkesi Uygulamanın veritabanı bağlantısında kullandığı hesabın yetkileri minimum düzeyde tutulmalı. Web uygulamasının okuma yapan hesabı, DROP TABLE yetkisine sahip olmamalı. Admin işlemleri için ayrı hesap kullanılmalı. 5. Hata Mesajlarını Gizleme Detaylı SQL hata mesajları, saldırgana veritabanı yapısı hakkında bilgi verir. Üretim ortamında hata detayları kullanıcıya gösterilmemeli, sadece loglara yazılmalı. Kullanıcıya generic hata mesajı gösterilmeli. 6. Web Uygulama Güvenlik Duvarı (WAF) WAF, bilinen SQL Injection kalıplarını tespit edip engeller. Cloudflare, AWS WAF, ModSecurity gibi çözümler bu amaçla kullanılabilir. Ancak WAF'ı birincil savunma olarak düşünmeyin — kod seviyesinde önlem almanın yerini tutmaz. 7. Düzenli Güvenlik Denetimi Kod denetimi (code review), statik analiz araçları (SonarQube, Semgrep) ve sızma testleri ile SQL Injection açıklarını proaktif olarak tespit edin. Otomatik tarama araçları (sqlmap, OWASP ZAP) da düzenli olarak çalıştırılmalı. SQL Injection Açığını Tespit Etme Eğer mevcut bir uygulamanız varsa ve SQL Injection açığı olup olmadığını test etmek istiyorsanız: Manuel test: Form alanlarına tek tırnak ('), çift tırnak ("), OR 1=1, '; DROP TABLE-- gibi girdiler deneyin. Uygulama hata mesajı veriyor veya beklenmedik davranış gösteriyorsa açık olabilir. Otomatik araçlar: sqlmap, SQL Injection tespiti için endüstri standardıdır. OWASP ZAP ve Burp Suite gibi araçlar da SQL Injection modülleri içerir. Profesyonel sızma testi: Otomatik araçların yakalayamadığı karmaşık SQL Injection açıkları için uzman gözetiminde yapılan manuel test şarttır. Gerçek Dünya Örnekleri SQL Injection ile ilgili bilinen büyük olaylar: tarihte e-ticaret platformlarından milyonlarca kredi kartı çalındı, sosyal ağlardan kullanıcı verileri sızdırıldı, hükümet siteleri hacklendi. Hemen hepsi, geliştiricinin parametrik sorgu kullanmamasından veya ORM'i yanlış kullanmasından kaynaklandı. Sonuç SQL Injection, 25 yıldır bilinen bir açık. Çözümü de 25 yıldır hazır: parametrik sorgular. Ama hâlâ her yıl milyonlarca veritabanı bu basit hata yüzünden ele geçiriliyor. Sebep; bilgisizlik, tembellik veya eski kod tabanlarının modernize edilmemesi. Eğer bir web uygulaması geliştiriyorsanız, SQL Injection'a karşı önlem almak tercih değil, temel bir sorumluluktur. Eğer bir işletme sahibiyseniz, kullandığınız uygulamaların SQL Injection testinden geçirildiğinden emin olun. Diyarbakır'da web uygulamalarınız için SQL Injection testi dahil kapsamlı güvenlik denetimi için VefaSoft ile iletişime geçebilirsiniz.

İlgili Yazılar:

Web Uygulama Güvenlik Testi: OWASP Top 10 Açıklaması XSS (Cross-Site Scripting) Saldırısı Nedir? Korunma Yolları Sızma Testi (Penetrasyon Testi) Nedir? Kapsamlı Rehber Siber Güvenlik Nedir? 2026 Rehberi