SQL Injection (SQLi) Nedir? Saldırı Senaryosu & Koruma
SQL Injection (SQLi) — web uygulaması kullanıcı girişini filtrelemeden SQL sorgusuna koyduğunda, saldırganın komut yürütebilir hale gelmesidir.
SQLi Nedir?
Uygulamanın SQL sorgusundaki input'u validate etmemesi, saldırganın sorgu mantığını değiştirmesine izin verir.
Örnek:
SELECT * FROM kullanicilar WHERE ad = '{input}'Hacker ' OR '1'='1 girer:
SELECT * FROM kullanicilar WHERE ad = '' OR '1'='1'
Tüm kayıtları döner.
SQLi Türleri
- Union-Based:
UNION SELECTile veri elde etme - Time-Based Blind:
SLEEP()ile veri brute-force - Error-Based: Hata mesajlarından veri çekme
- Stacked Queries: Çoklu SQL komut çalıştırma
Pratik Saldırı Örneği
Login formunda:
Username: admin' -- Password: herhangi
Sorgu:
SELECT * FROM users WHERE username='admin' --' AND password='herhangi'
Comment (--) password kısmını yok eder → admin'e login olur.
---
🔴 Risk Derecesi: Kritik (Critical)
Kötü Niyetli Hacker Ne Yapabilirdi?
Veri Hırsızlığı:
- Tüm müşteri verileri, şifre hash'leri elde eder
- Finansal bilgiler, sosyal güvenlik numaraları çeler
- Kişisel kimlik bilgileri satılır (dark web)
Veritabanı Kontrolü:
- Admin kullanıcı oluşturur (arka kapı)
- Verileri silme/değiştirme yapabilir
- Yasal belgeler sahteliğe uğrar
Sistem Kontrolü (RCE):
- MySQL INTO OUTFILE → shell dosyası yazma
- xp_cmdshell (MSSQL) → işletim sistemi komutları
- Sunucu tamamen ele geçirilir
Fidye Yazılımı:
- Veritabanını şifreler
- "500K$ ödeyin veya verilerinizi kamu ederim"
- Şirketi iş durmasına uğratır
Yasal + Finansal Sonuçlar - KVKK: 5-10M₺ ceza + hapis (veri ihlali) - İş Durması: Günlük kayıp X₺ - Müşteri Dava: Class action → şirket iflası - İtibar Kaybı: Müşteri terki 50%+
---
✅ Nasıl Savunulur
1. Parameterized Queries (Prepared Statements):
# ❌ Yanlış:
query = f"SELECT * FROM users WHERE id = {user_id}"
# ✅ Doğru:
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_id,))
2. Input Validation:
- Beklenmeyen karakterleri reddet
- Whitelist kontrol (sadece beklenen formatı kabul et)
3. Least Privilege:
- Database user'ı minimal permission verdir
- Read-only database user (reporting) ayrı
4. WAF + Rate Limiting:
- ' OR pattern'lerini tespit et ve engelle
- Ş
üpheli sorguları logla
5. Periyodik Pentest:
- Yazılımd üzenli SQLi test yaptır
- OWASP Top 10 audit'i
---
Sonuç
SQLi, uygulamaların en tehlikeli zafiyetlerinden biri. Bir hata, tüm veriyi ele verir. Başlıca savunma: Prepared Statements + Input Validation.
🛡️ Sisteminizin güvenliğinden emin misiniz?
Ücretsiz Ön Değerlendirme →Yazıdaki zafiyetlerden etkileniyor olabilirsiniz. REDCELL uzmanları 30 dakikada siber risk analizi yapar.