SiteGüvenlik
Blog'a dön
·9 dk okuma

SQL Injection Nedir? Türleri, Örnekleri ve Korunma Yöntemleri

SQL Injection (SQL Enjeksiyonu), siber güvenlik dünyasında en tehlikeli ve yaygın web uygulama açıklarından biridir. OWASP Top 10 listesinde uzun yıllardır üst sıralarda yer alır. Bu yazıda SQL Injection nedir, nasıl çalışır ve nasıl korunulur sorularına detaylı yanıtlar bulacaksınız.

SQL Injection Nedir?

SQL Injection, saldırganların veritabanı sorgularına zararlı SQL kodu enjekte etmesiyle gerçekleşen bir saldırı türüdür. Uygulama, kullanıcı girdisini (form, URL parametresi) doğrudan SQL sorgusuna eklediğinde bu açık oluşur. Saldırgan, örneğin bir giriş alanına ' OR '1'='1 yazarak tüm kullanıcıları listeleyebilir.

SQL Injection Türleri

Classic (Klasik) SQL Injection

En basit türdür. Saldırgan, tek tırnak veya çift tire gibi karakterlerle sorgu mantığını bozar. Örnek: admin'-- girildiğinde şifre kontrolü atlanabilir.

Blind (Kör) SQL Injection

Hata mesajı dönmese bile, uygulamanın yanıt süresi veya davranışı üzerinden veri çıkarılabilir. Boolean-based ve time-based olmak üzere iki alt türü vardır. Tespit etmesi daha zordur ancak aynı derecede tehlikelidir.

Union-Based SQL Injection

UNION operatörü kullanılarak farklı tablolardan veri birleştirilir. Saldırgan, kullanıcı adları, şifre hash'leri veya kredi kartı bilgileri gibi hassas verilere erişebilir. Bu tür, veri sızıntısında en etkili yöntemlerden biridir.

SQL Injection Örnekleri

Bir login formunda backend kullanıcı girdisini doğrudan SQL sorgusuna ekliyorsa açık oluşur. Saldırgan e-posta alanına admin@site.com' OR 1=1-- yazarak tüm kullanıcıları bypass edebilir. Benzer şekilde, DROP TABLE users; gibi komutlarla veritabanı silinebilir.

Gerçek Dünya Etkileri

SQL Injection ile milyonlarca kullanıcı verisi çalınmış, şirketler milyarlarca dolar tazminat ödemiştir. Equifax, Sony, Yahoo gibi devler bu saldırıdan etkilenmiştir. Küçük siteler de hedef alınır; otomatik tarama botları sürekli açık arar. Önlem almak her zaman saldırıyı temizlemekten ucuzdur.

Korunma Yöntemleri

Parametreli sorgular (Prepared Statements) kullanın. PHP'de PDO veya mysqli ile prepared statement, Python'da parametre binding kullanın. Asla kullanıcı girdisini doğrudan sorguya eklemeyin. ORM (Object-Relational Mapping) kütüphaneleri de bu riski azaltır. Ek olarak, veritabanı kullanıcısına yalnızca gerekli yetkileri verin; DROP, DELETE gibi tehlikeli işlemleri kısıtlayın.

WAF (Web Application Firewall) ve düzenli güvenlik taramaları ile SQL Injection açıklarını tespit edin. SiteGüvenlikTesti gibi araçlar, form ve URL parametrelerinizi otomatik olarak test eder. Aylık tarama rutini oluşturun.