SQL Injection ve XSS: İki Klasik Enjeksiyon Zafiyeti Nasıl Oluşur ve Önlenir?
6 Eylül 2026
SQL Injection (SQLi) ve Cross-Site Scripting (XSS), web güvenliğinin en eski ve en yaygın iki zafiyetidir. Farklı yerlerde çalışsalar da kök nedenleri aynıdır: güvenilmeyen kullanıcı girdisinin, veri yerine kod/sorgu olarak yorumlanması. Bu ortak kökü anlamak, doğru savunmayı da netleştirir.
SQL Injection
SQLi, kullanıcı girdisinin bir veritabanı sorgusuna doğrudan gömülmesiyle oluşur. Uygulama şöyle bir sorgu kurarsa:
"SELECT * FROM users WHERE email = '" + girdi + "'"
saldırgan girdi yerine ' OR '1'='1 yazarak sorgunun mantığını değiştirir; kimlik doğrulamayı atlatabilir veya veriyi sızdırabilir. Etkisi ağırdır: veri okuma/değiştirme, bazen sunucuya kod çalıştırma.
Savunma — parametreli sorgular: Kök çözüm, girdiyi sorgu metnine eklememektir. Parametreli sorgular (prepared statements) ile girdi, sorgu yapısından ayrı bir veri olarak taşınır; veritabanı onu asla kod olarak yorumlamaz:
SELECT * FROM users WHERE email = ? -- girdi ayrı parametre olarak bağlanır
Ek katmanlar: en az ayrıcalıklı veritabanı hesabı, girdi doğrulama (allowlist), ORM’lerin güvenli API’lerini kullanma. String birleştirme ile sorgu kurmaktan kaçının.
Cross-Site Scripting (XSS)
XSS, saldırganın girdisinin bir sayfaya betik olarak yansımasıdır; kurbanın tarayıcısında saldırganın JavaScript’i çalışır. Üç ana tür:
- Reflected (yansıyan): Girdi anında yanıtta yansır (ör. arama sonucu sayfasında).
- Stored (kalıcı): Girdi kaydedilir ve sonradan başka kullanıcılara sunulur (ör. yorum alanı) — en tehlikelisi.
- DOM-based: Yansıma sunucuda değil, istemci tarafı JavaScript’te oluşur.
Etkisi: oturum çerezi çalma (HttpOnly yoksa), kullanıcı adına işlem, kimlik avı, sayfa içeriğini değiştirme.
Savunma — bağlama duyarlı çıktı kodlaması: Kök çözüm, kullanıcı verisini sayfaya yazarken bulunduğu bağlama göre kaçış (encoding) uygulamaktır: HTML gövdesi, HTML özniteliği, JavaScript ve URL bağlamları farklı kaçış gerektirir. Ek olarak:
- Content-Security-Policy, XSS’in etkisini sınırlayan güçlü bir ikinci katmandır.
- Oturum çerezlerinde HttpOnly, betikle çerez çalınmasını engeller.
- Modern çerçeveler (React, Angular vb.) varsayılan kaçış sağlar;
dangerouslySetInnerHTMLgibi kaçışı atlayan yolları dikkatli kullanın.
Ortak ders
İki zafiyet de aynı ilkeyle çözülür: veriyi kod bağlamından ayrı tutmak. SQLi’de bunu parametreli sorgular, XSS’te bağlama duyarlı çıktı kodlaması sağlar. “Girdiyi temizleyip birleştirme” yaklaşımı kırılgandır; asıl güvenli yol, girdiyi hiçbir zaman yürütülebilir bağlama sokmamaktır.
Özet
SQLi ve XSS, güvenilmeyen girdinin kod olarak yorumlanmasından doğar. SQLi için parametreli sorgular, XSS için bağlama duyarlı çıktı kodlaması + CSP. İkisinde de temel ilke aynıdır: veri ile kodu ayır.
Kaynaklar: OWASP SQL Injection Prevention, OWASP XSS Prevention, OWASP Top 10: Injection.
Sitenizde yansıyan XSS veya enjeksiyon belirtisi var mı? CyberTestify’ın aktif doğrulama testleri, keşfedilen giriş noktalarında zararsız problarla bunu deterministik olarak kontrol eder.