SQL enjeksiyonu nedir?
SQL enjeksiyonu (SQL injection), bir uygulamanın kullanıcı girdisini doğrudan SQL sorgusuna eklemesi sonucu saldırganın sorguyu değiştirebildiği açıktır. Saldırgan veritabanındaki verileri okuyabilir, değiştirebilir veya silebilir; bazı durumlarda sunucuda komut çalıştırmaya kadar ilerleyebilir.
Açık, girdinin veri yerine sorgunun parçası olarak yorumlanmasından doğar. Eski ve köklü bir sorun olmasına rağmen güvensiz kodlama alışkanlıkları nedeniyle hâlâ sık görülür.
Nasıl çalışır?
Uygulama, formdan gelen değeri string birleştirmeyle sorguya ekliyorsa, saldırgan girdiye SQL parçaları yazarak sorgunun mantığını değiştirebilir. Sonuç, kimlik doğrulamayı atlamak, tablolardaki verileri çekmek veya kayıtları bozmak olabilir.
Türleri arasında doğrudan hata mesajlarından bilgi alan yöntemler, sonucu gizlice sorgulayan “kör” yöntemler ve veritabanı sunucusunun gecikmesinden bilgi çıkaran zaman tabanlı yöntemler bulunur.
Sunucu ve hosting ortamında
PHP ve MySQL/MariaDB ile çalışan sitelerde, özellikle özel yazılmış formlar ve güncellenmemiş eklentiler bu açık için tipik zemindir. Saldırganlar otomatik araçlarla açık arar; bu yüzden sıradan bir sitede bile denemeler günlüklerde görülebilir.
- Veritabanı kullanıcısına yalnızca gereken yetkileri verin; uygulama hesabı ayrı olsun.
- WAF kuralları bilinen saldırı kalıplarını engelleyebilir, ancak kod düzeltmesinin yerini tutmaz.
- Erişim günlüklerinde olağan dışı karakterler içeren istekler izlenebilir.