Blog Details

💻 SQL Injection Nedir? Nasıl Çalışır ve Nasıl Korunulur?

06 Ağu 2025 - Blog
shape
shape
shape

🔐 SQL Injection Nedir?

SQL Injection (SQLi), saldırganların bir web uygulamasındaki veritabanına kötü niyetli SQL sorguları enjekte ederek yetkisiz erişim elde etmeye çalıştığı bir siber saldırı türüdür. Bu açık genellikle güvenli olmayan kullanıcı girişleri (örneğin form alanları) üzerinden gerçekleştirilir.

Kısacası:

Kullanıcının girmesi gereken veri yerine SQL kodu girilerek sistem kandırılır.


🧪 SQL Injection Nasıl Çalışır?

Web uygulamaları, çoğu zaman kullanıcıdan aldığı verileri veritabanına SQL sorguları aracılığıyla gönderir. Eğer bu veriler doğrulanmadan veya filtrelenmeden doğrudan sorguya eklenirse, işte orada tehlike başlar.

🔧 Basit Bir Örnek:

sqlKopyalaDüzenleSELECT * FROM users WHERE username = 'kullanici' AND password = 'sifre';

Eğer kullanıcı aşağıdaki gibi zararlı bir giriş yaparsa:

  • Kullanıcı adı: ' OR '1'='1
  • Şifre: ' OR '1'='1

O zaman sorgu şu hale gelir:

sqlKopyalaDüzenleSELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';

Ve sonuç?
➡️ Veritabanı, giriş koşullarını her zaman doğru kabul eder ve saldırgan sisteme giriş yapar!


🚨 SQL Injection ile Neler Yapılabilir?

Bir SQL Injection açığı, sistemdeki tüm verilerin kontrol edilmesine neden olabilir. Saldırgan şunları yapabilir:

  • 👁️‍🗨️ Veritabanındaki tüm bilgileri görebilir (kullanıcılar, şifreler, kart bilgileri).
  • 🧾 Kayıtları değiştirebilir, silebilir veya yenilerini ekleyebilir.
  • 🔑 Admin hesabına erişebilir veya yeni admin yaratabilir.
  • 📥 Sunucudan veri sızdırabilir (data breach).
  • 🧨 Sisteme zarar verebilir, çökertme (DoS) saldırıları düzenleyebilir.

🕵️‍♂️ SQL Injection Türleri

SQLi saldırılarının birkaç farklı türü vardır:

1. Classic (In-band) SQLi:

En yaygın ve basit türdür. Hatalı sorgu sonucu doğrudan kullanıcıya geri döner.

2. Blind SQLi:

Veri doğrudan dönmez, ancak saldırgan sistemin tepkilerine bakarak bilgi edinir.

3. Time-based Blind SQLi:

Sunucunun tepki süresine göre doğru/yanlış tahmin yapılır (örneğin 5 saniye gecikirse doğru bilgi varsayılır).

4. Out-of-band SQLi:

Sistemden doğrudan yanıt alınamazsa, alternatif kanallarla (e-posta, DNS gibi) veri sızdırılır.


🔐 SQL Injection’dan Nasıl Korunulur?

İyi haber: Bu tür saldırılardan korunmak mümkün. Kötü haber: Hâlâ birçok sistemde bu açık bulunuyor. Ama senin sistemin öyle olmayacak, çünkü aşağıdaki adımları uygulayacaksın ⬇️

✅ 1. Hazır SQL yerine Parametreli (Prepared) Sorgular kullan

pythonKopyalaDüzenlecursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))

→ Bu yapı, kullanıcıdan gelen verileri otomatik olarak filtreler.

✅ 2. Input Validation (Girdi Doğrulama) Yap

  • Kullanıcının girdiği verilerin formatını, uzunluğunu ve tipini kontrol et.

✅ 3. Stored Procedures (Saklı Yordamlar) Kullan

  • Doğrudan SQL kodu yerine, daha güvenli ve kontrollü yöntemler sunar.

✅ 4. Hata Mesajlarını Gösterme

  • SQL hatalarını kullanıcıya gösterme! Bilgi sızdırabilir.

✅ 5. Web Uygulama Güvenlik Duvarı (WAF) Kullan

  • Zararlı istekleri otomatik olarak engelleyebilir.

✅ 6. Veritabanı Yetkilendirmesini Sınırla

  • Uygulama, sadece gerekli işlemleri yapacak yetkilerle bağlanmalı.

✅ 7. Güvenlik Testleri ve Denetimleri Uygula

  • Pentest (sızma testi) yaptır, zafiyet tarayıcıları (ZAP, Burp Suite) kullan.

👨‍💻 SQL Injection Güvenlik Testi Nasıl Yapılır?

Eğer geliştiriciysen veya güvenlik uzmanıysan, aşağıdaki araçlarla sistemini test edebilirsin:

  • 🔎 SQLmap – Otomatik SQL Injection tespiti ve sömürü aracı.
  • 🛡️ Burp Suite – Web uygulaması testleri için profesyonel araç.
  • 🔬 OWASP ZAP – Açık kaynaklı zafiyet tarayıcı.

🧪 Test sırasında canlı sistemde değil, test ortamında deneme yapmayı unutma!


❓ Sıkça Sorulan Sorular

SQL Injection sadece eski sistemlerde mi olur?

Hayır. Yeni yazılmış uygulamalarda da aynı hata yapılabiliyor. Kod güvensizse, risk her zaman vardır.

SQL Injection ile parola kırılabilir mi?

Evet, özellikle parola şifrelenmemişse ya da veritabanına doğrudan erişim sağlanmışsa.

Sadece giriş ekranlarında mı SQL Injection olur?

Hayır. Arama kutuları, filtreleme panelleri, yorum alanları… Her yerde olabilir!


🧭 Son Söz: Veritabanını Korumak, Tüm Sistemi Korumaktır

SQL Injection, basit ama ölümcül bir açıklık. Kötü niyetli kişilerin elinde sistemine giriş kapısı olabilir. Ama bilinçli geliştiriciler, güçlü kod yapıları ve doğru güvenlik önlemleriyle bu risk tamamen ortadan kaldırılabilir.

Güvenlik sonradan eklenen bir özellik değil, baştan tasarlanması gereken bir disiplindir.

Comment

Hadi Birlikte Geliştirmeye Başlayalım

Bana Ulaşın