SQL Injection Nedir? (SQL Enjeksiyonu)
SQL Injection, bir uygulamanın veritabanı ile iletişim kurarken kullanıcı girişlerini yeterince doğrulamaması veya filtrelememesi nedeniyle ortaya çıkan bir siber güvenlik açığıdır. Kötü niyetli bir kullanıcı, SQL sorgularına zararlı kodlar enjekte ederek veritabanında yetkisiz işlemler yapabilir. Bu durum hassas verilerin çalınmasından, veritabanının tamamen silinmesine kadar ciddi sonuçlara yol açabilir.
SQL Injection, halen en yaygın ve tehlikeli tehditlerden biridir; geliştiriciler ve güvenlik uzmanları için önlenmesi gereken kritik bir konudur.
SQL Injection Nasıl Çalışır?
Bir uygulama, kullanıcıdan aldığı verileri doğrudan SQL sorgularına dahil ettiğinde SQL Injection riski doğar. Örneğin, giriş formu verilerini filtrelemeyen bir sistemde, saldırgan zararlı SQL ifadeleri ekleyebilir.
SELECT * FROM users WHERE username = 'kullanici' AND password = 'sifre';
Saldırgan kullanıcı adı alanına şu kodu girerse:
kullanici' OR '1'='1
Sorgu şu hale gelir:
SELECT * FROM users WHERE username = 'kullanici' OR '1'='1' AND password = 'sifre';
Bu durumda koşul her zaman doğru olur ve saldırgan şifre kontrolünü atlayarak yetkisiz erişim elde eder.
SQL Injection Türleri
Klasik SQL Injection
Kullanıcı girişlerinden doğrudan yapılan enjeksiyonlardır.
Blind SQL Injection
Veri doğrudan alınamaz; sorguların doğru/yanlış yanıtları üzerinden bilgi çıkarılır.
Time-Based Injection
Veritabanı yanıt süreleri kullanılarak bilgi edinilir (örneğin SLEEP komutu).
Error-Based Injection
Hata mesajlarından veritabanı yapısı hakkında bilgi elde edilir.
Out-of-Band Injection
DNS sorguları gibi alternatif kanallar üzerinden veri sızdırılır.
SQL Injection’ın Olası Sonuçları
- Veri Sızıntısı: Kullanıcı veya finansal veriler çalınabilir.
- Veri Manipülasyonu: Veriler değiştirilebilir ya da silinebilir.
- Yetkisiz Erişim: Yönetici hesaplarına erişim sağlanabilir.
- Veritabanı Hasarı: Sistem tamamen silinebilir.
- İtibar Kaybı: Şirket güvenilirliği zarar görür.
SQL Injection’dan Korunma Yöntemleri
- Parametreli Sorgular: Prepared statements kullanarak girişleri izole edin.
- Giriş Doğrulama: Veri formatı kontrolleri yapın (ör. sadece sayılar).
- En Az Yetki İlkesi: Veritabanı kullanıcılarına minimum yetki verin.
- Hata Mesajlarını Gizleyin: Kullanıcıya gösterilmeyip loglarda saklanmalı.
- WAF Kullanımı: Web Application Firewall saldırıları tespit eder.
- ORM Araçları: ORM sistemleri sorguları güvenli hale getirir.
SQL Injection Tespiti ve Araçları
- SQLMap: Otomatik açık tespiti ve istismarı.
- Burp Suite: Web uygulamalarında zafiyet analizi.
- OWASP ZAP: Açık kaynaklı güvenlik tarayıcı.
- Havij: SQL Injection test aracı.
SQL Injection ve Yasal Sonuçlar
Yetkisiz test veya saldırı girişimleri, TCK 243 ve TCK 244 maddeleri kapsamında suçtur ve 1–5 yıl arası hapis cezası doğurabilir. SQL Injection yalnızca yetkili kişiler tarafından, izinli sistemlerde yapılmalıdır.
SQL Injection Örnekleri: Pratik Senaryolar
Giriş Sayfasında Yetkisiz Erişim
Login formuna zararlı veri girilerek admin hesabına erişim sağlanır.
Hassas Verilerin Çalınması
UNION SELECT komutuyla kullanıcı verileri elde edilir.
Veri Değiştirme
UPDATE komutlarıyla kayıt manipülasyonu yapılabilir.
Veritabanı Silme
DROP TABLE ile veritabanı tablosu silinebilir.
Zaman Tabanlı Kör Saldırı
SLEEP() gibi komutlarla yanıt süreleri üzerinden veri çıkarımı yapılır.
Gerçek Hayatta SQL Injection
2011’de Sony PlayStation Network’e yapılan bir SQL Injection saldırısı, 77 milyon kullanıcının bilgilerinin çalınmasına yol açtı. Bu olay, SQL Injection’ın yıkıcı gücünün en bilinen örneklerinden biridir.
SQL Injection’dan Korunma – Sonuç
SQL Injection, web uygulamaları için en ciddi tehditlerden biridir. Ancak parametreli sorgular, giriş doğrulaması ve yetki sınırlamaları gibi doğru önlemlerle bu risk büyük ölçüde azaltılabilir.
Siber güvenlikte farkındalık ve proaktif önlem, kurumların veri bütünlüğünü ve itibarını korumanın temelidir.

