SQL Injection Nedir? Geliştiriciler İçin Kapsamlı Rehber

SQL Injection Nedir?

SQL Injection, veritabanıyla iletişim kuran uygulamalarda meydana gelen ve kötü niyetli kullanıcıların veritabanı sorgularını manipüle etmesine olanak tanıyan kritik bir güvenlik açığıdır. Genellikle kullanıcıdan alınan girdinin doğru şekilde filtrelenmemesi nedeniyle ortaya çıkar.

Nasıl Çalışır?

Uygulama, kullanıcıdan aldığı veriyi doğrudan SQL sorgusuna eklediğinde sorgunun yapısı bozulabilir:

SELECT * FROM users WHERE username = '$username' AND password = '$password';
    

Kötü niyetli bir kullanıcı şöyle bir giriş yaparsa:

' OR '1'='1
    

Sorgu şu hale gelir:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
    

Bu durumda sorgu her zaman true döner ve yetkisiz erişim sağlanabilir.

SQL Injection Türleri

  • In-Band SQLi: En yaygın türdür. Sonuçlar doğrudan gözlemlenebilir.
  • Blind SQLi: Yanıt verilmez, ama mantıksal sorgularla bilgi alınabilir.
  • Error-Based SQLi: Hata mesajlarından faydalanılır.
  • Time-Based SQLi: Cevap süresi üzerinden bilgi çıkarılır.

Olası Tehlikeler

  • Tüm kullanıcı verileri sızdırılabilir
  • Yetkisiz kullanıcı sistemlere erişebilir
  • Veritabanı yapısı keşfedilebilir
  • Veriler değiştirilebilir veya silinebilir

Korunma Yöntemleri

  • Hazır Sorgular (Prepared Statements): Parametreli sorgular kullanın.
  • ORM Araçları: SQLAlchemy, Django ORM gibi yapılar SQL üretimini yönetir.
  • Input Validation: Girdi doğrulaması ve tip kontrolü yapın.
  • Yetkilendirme: Minimum yetki prensibi uygulayın.
  • Hata Gizleme: Kullanıcılara veritabanı hataları göstermeyin.
  • WAF Kullanımı: Saldırı kalıplarını engelleyen güvenlik katmanı ekleyin.

Test Etme Araçları

  • sqlmap gibi otomatik araçlarla test yapılabilir
  • Manuel testlerde ' OR '1'='1 gibi girdiler denenebilir
  • Geliştirici tarafında SAST (statik analiz) araçları kullanılmalıdır
Not: Güvenli yazılım geliştirmek, sadece özellik üretmekten ibaret değildir. Güvenlik baştan tasarlanmalı ve her aşamada düşünülmelidir.

Sonuç

SQL Injection, basit bir kod hatasıyla büyük veri ihlallerine neden olabilir. Ancak doğru geliştirme alışkanlıkları ve güvenlik farkındalığı ile bu açıklığın önüne geçmek oldukça kolaydır.

Scroll to Top