SQL Injection, bir hacker’ın, web uygulamanızda bulunan SQL sorgularına müdahale ederek, veritabanınıza yetkisiz erişim sağlamasına olanak tanır. Bu açık, genellikle geliştiricilerin veri tabanı sorgularını doğru bir şekilde filtrelememesi veya kullanıcı girdilerini doğru doğrulamaması sonucu ortaya çıkar.
Bir web uygulaması, kullanıcıdan aldığı verileri kullanarak veritabanı sorguları oluşturur. Ancak, bu verilerin doğru şekilde kontrol edilmemesi, hacker’lara veritabanına komutlar ekleme şansı verir. Peki, bu nasıl işliyor? Gelin birlikte örnek üzerinden inceleyelim.
SQL Injection Nasıl Çalışır?
Kullanıcı Adı: admin
Şifre: ' OR 1=1 --
Bu durumda, şifre kısmına yazılan `' OR 1=1 --` ifadesi, SQL sorgusunun iç yapısını değiştirir ve şu hale gelir:
```sql
SELECT * FROM users WHERE username = 'admin' AND password = '' OR 1=1 --';
```
Bu sorgu, şifrenin doğru olup olmadığını kontrol etmeden 1=1 ifadesinin her zaman doğru olmasını sağlar. Bu, hacker’ın giriş yapmasına neden olur çünkü SQL sorgusu her zaman doğru bir sonuç döndürür!
SQL Injection Hatasının Zararları
1. Kişisel Verilerin Çalınması: Hacker, kullanıcılarınızın kişisel bilgilerine, şifrelerine ve diğer hassas verilere erişebilir.
2. Veri Manipülasyonu: Veritabanındaki veriler değiştirilebilir, silinebilir veya yanlış şekillerde kullanılabilir.
3. Sunucuya Zarar Verme: Birçok hacker, SQL Injection hatasından yararlanarak sunucunuz üzerinde tam yetki kazanabilir. Bu durumda sunucunuz tamamen kontrol dışı kalabilir.
SQL Injection'dan Korunmak İçin Alınması Gereken Önlemler
# 1. Hazırlıklı İfadeler (Prepared Statements) Kullanmak
```php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
?>
```
Bu kod parçası, kullanıcı adı ve şifre değerlerini sorgu dışında işleyerek, SQL Injection'ı engeller.
# 2. Kullanıcı Girdilerini Doğrulamak
# 3. Veritabanı Erişim Yetkilerini Kısıtlamak
# 4. Hata Mesajlarını Gizlemek
```php
ini_set('display_errors', 0);
error_reporting(E_ALL);
?>
```
Bu ayar, hataların detaylarını göstermediği için saldırganın hata üzerinden istismar yapmasını engeller.
SQL Injection'a Karşı Web Güvenliği İçin Ekstra İpuçları
- Web Uygulaması Güvenlik Duvarı (WAF) Kullanımı: WAF, zararlı SQL sorgularını tespit edip engelleyebilir.
- Karmaşık Parolalar Kullanın: Kullanıcı hesaplarınız için karmaşık parolalar zorunlu kılın. Böylece, SQL Injection olmasa bile, sisteminize yapılan diğer saldırılara karşı güvenliğinizi artırırsınız.