SQL Enjeksiyonu (SQLi) Nedir?
SQL Enjeksiyonu (SQLi), saldırganların veritabanını manipüle etmek için giriş alanına kötü niyetli SQL ifadeleri girdiği bir saldırı türüdür.
Bu saldırı, doğrulama ve kullanıcı girişini düzgün bir şekilde ele alamayan uygulamaları hedef alır ve şifre veya kredi kartı bilgileri gibi hassas verilere yetkisiz erişime izin verir.
SQL Enjeksiyonu Nasıl Çalışır
Bir uygulama, kullanıcı girişini veritabanı sorgusuna doğrudan ve uygun doğrulama olmadan dahil ettiğinde, saldırganlar sorgunun davranışını kötü niyetli bir SQL ifadesi girecek şekilde değiştirebilir.
Örneğin:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Bir saldırgan şunu girebilir:
' OR '1'='1
Sonuç olarak:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Bu her zaman doğru döner ve yetkisiz erişim sağlar.
Siber Güvenlikte SQL Enjeksiyonunun Önemi
SQL Enjeksiyonu, siber güvenlikteki en tehlikeli ve en eski tekniktir. Bu tür saldırılar, sürekli olarak OWASP İlk 10 listesinde yer almaktadır.
Küçük güvenlik açıkları bile bir saldırgana şunları yapma imkanı verir:
- Verilere erişim, değiştirme veya silme
- Kimlik doğrulamayı atlatma
- Veritabanında yönetimsel işlemler gerçekleştirme.
- Tüm sistemi tehlikeye atma.
Yaygın SQL Enjeksiyonu Türleri
- Klasik SQLi : Web formları veya URL parametreleri aracılığıyla doğrudan enjeksiyon.
- Kör SQLi : Saldırganlar dolaylı olarak veritabanı bilgilerini çıkarır (örneğin, hata mesajları veya yanıt süresi aracılığıyla).
- Birleşim Tabanlı SQLi : Birden fazla sorgunun sonuçlarını birleştirmek için UNION operatörünü kullanır.
- Hata Tabanlı SQLi : Bilgi çıkarmak için veritabanı hata mesajlarına dayanır.
- Zaman Tabanlı Kör SQLi : Sorgu sonuçlarını tahmin etmek için sunucu yanıt gecikmelerini kullanır.
SQL Enjeksiyonunu Önleme Yöntemleri
1. Parametreli Sorgular (Hazırlanmış İfadeler) Kullanın
SQL komutlarının kullanıcı girdilerini veri olarak ele almasını, yürütülebilir kod olarak değil, sağlayın.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Girdi Doğrulama ve Temizleme
Kullanıcılardan gelen tüm girdileri doğrulayın, yalnızca beklenen karakterlere izin verin.
3. ORM Çerçeveleri Kullanın
Prisma, Hibernate gibi çerçeveler doğrudan SQL işlemlerini azaltır.
4. En Az Ayrıcalık İlkesi
Kullanıcı izinlerini sınırlayın, yalnızca gerekli izinleri verin.
5. Düzenli Güvenlik Testleri
Uygulama güvenliği test araçları olan SAST, DAST veya IAST kullanarak enjeksiyon açıklarını erken tespit edin.
Gerçek Dünyada Örnek
Bir çevrimiçi mağaza web sitesi, saldırganların bir giriş formunda SQL enjeksiyonu kullanarak veritabanından kredi kartı bilgilerini çıkardığı bir ihlal yaşadı.
İlgili Terimler
- XSS (Siteler Arası Komut Dosyası Çalıştırma)
- DAST (Dinamik Uygulama Güvenliği Testi)
- OWASP Top 10
- Uygulama Güvenliği Testi