Veritabanı Güvenliği: SQL Injection ve Veri Sızıntısına Kalkan
23.10.2026 | 19
SQL Injection: Modern Bir Tehdit
Veritabanı güvenliği, bir uygulamanın en kritik katmanıdır. SQL Injection (SQLi), saldırganın uygulama tarafından gönderilen SQL sorgularına müdahale ederek veritabanı üzerinde yetkisiz işlemler yapmasına olanak tanıyan en yaygın güvenlik açığıdır. Bu makalede, bu tehdidi kökten nasıl çözeceğimizi inceliyoruz.
Prepared Statements Kullanımı
SQLi'ye karşı en etkili savunma hattı Prepared Statements (Hazırlanmış İfadeler) kullanmaktır. Bu yöntem, sorgu mantığı ile veriyi birbirinden ayırır.
// Güvensiz yöntem: $sql = 'SELECT * FROM users WHERE username = ' . $_POST['user'];
// Güvenli yöntem (PDO):
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute(['username' => $_POST['user']]);
$user = $stmt->fetch();
Veritabanı Kullanıcı Yetkilendirmesi
Uygulamanızın veritabanına bağlanan kullanıcısı, sadece ihtiyaç duyduğu yetkilere sahip olmalıdır. Principle of Least Privilege (En Az Yetki İlkesi) gereği, web uygulamanızın 'root' veya 'admin' yetkileriyle çalışması büyük bir risktir.
- Uygulama kullanıcısına sadece gerekli tablolarda SELECT, INSERT, UPDATE izni verin.
- DROP veya GRANT gibi kritik komutları uygulama kullanıcısından tamamen kısıtlayın.
- Gereksiz prosedürleri ve fonksiyonları veritabanından kaldırın.
Mimari Uyarı: Sadece kod düzeyinde değil, veritabanı sunucusu seviyesinde de (örneğin MySQL'de 'GRANT' kısıtlamalarıyla) katı güvenlik politikaları uygulayın.
Veri Sızıntılarını Önleme Stratejileri
SQL Injection dışında, veri sızıntılarını önlemek için şu adımları mutlaka uygulayın:
- Girdi Validasyonu: Kullanıcıdan gelen veriye asla güvenmeyin; tip ve uzunluk kontrollerini mutlaka yapın.
- Hata Mesajlarını Gizleyin: Üretim (production) ortamında veritabanı hata detaylarını kullanıcıya göstermeyin. Bu, saldırgana tablo yapınız hakkında bilgi verir.
- SSL/TLS Kullanımı: Veritabanı ile uygulama sunucusu arasındaki trafiği şifreleyin.