# SQL Injection vs XSS

Adres: https://softwaredictionary.org/tr/karsilastirma/sql-injection-vs-xss
Son güncelleme: 2026-10-02

Kısaca: SQL injection sunucuya saldırganın veritabanı komutlarını çalıştırtır; XSS ise saldırganın JavaScript'ini başka kullanıcıların tarayıcısında çalıştırır.

## SQL injection ile XSS arasındaki fark nedir?

İkisi de enjeksiyon saldırısıdır: güvenilmeyen girdi, veri yerine kod olarak işlenir. SQL injection'da kullanıcı adı gibi bir girdi bir veritabanı sorgusunun içine yapıştırılır; böylece `' OR '1'='1` gibi bir değer sorgunun yaptığı işi değiştirir. Siteler arası betik çalıştırmada ise yorum gibi bir girdi kaçış uygulanmadan (escaping) bir web sayfasına konur; içindeki bir `<script>` etiketi ya da olay işleyicisi de sayfayı görüntüleyen herkesin tarayıcısında çalışır.

Fark, enjekte edilen kodun nerede çalıştığı ve neye erişebildiğidir. SQL injection veritabanı sunucusunda çalışır; veriyi okuyabilir, değiştirebilir ya da silebilir, girişleri atlatabilir, hatta bazen makinenin kontrolünü ele geçirebilir. XSS ise kurbanların tarayıcılarında, sitenin yetkileriyle çalışır; oturum token'larını çalabilir, kullanıcı adına işlem yapabilir ya da sayfada gösterilenleri değiştirebilir.

Savunmalar tek bir fikri izler: kodla veriyi, buluştukları yerde ayrı tutun. SQL injection'a karşı sorguları metinlerden kurmak yerine parametreli sorgular ya da bir ORM kullanın ve veritabanı hesabına yalnızca ihtiyaç duyduğu yetkileri verin. XSS'e karşı çıktıyı bağlamına uygun biçimde kaçışlayın; React gibi modern framework'ler bunu varsayılan olarak yapar. Ham HTML eklemekten kaçının ve ikinci bir katman olarak Content Security Policy ekleyin.

Sık yapılan bir yanlış, girdiyi doğrulamanın ya da filtrelemenin yeterli olduğu düşüncesidir. Yasak listeleri kodlama hilelerini ve uç durumları kaçırır; güvenilir çözümler veritabanları için parametreli sorgular, HTML için de bağlama duyarlı çıktı kodlamadır. Girdi doğrulama asıl savunma değil, ek bir katmandır.

| Özellik | SQL Injection | XSS |
| --- | --- | --- |
| Enjekte edilen kod | SQL | JavaScript ya da HTML |
| Çalıştığı yer | Veritabanı sunucusunda | Diğer kullanıcıların tarayıcılarında |
| Kim zarar görür | Sitenin verisi ve içindeki herkes | Siteyi ziyaret eden kullanıcılar, tek tek |
| Tipik zarar | Çalınan veri, değiştirilen ya da silinen kayıtlar, atlatılan girişler | Çalınan oturumlar, kurban adına işlemler, tahrip edilen sayfalar |
| Asıl savunma | Parametreli sorgular ya da bir ORM | Çıktıyı kaçışlamak ve Content Security Policy |
| OWASP Top 10 | Injection başlığı altında | O da Injection başlığı altında |

## SQL Injection şu durumlarda doğru seçim

- Kod, SQL'i kullanıcı girdisiyle metinleri birleştirerek kuruyor.
- ORM'nin güvenli metotlarının atlandığı yerlerde ham sorgular kullanılıyor.
- Uygulamanın kullandığı veritabanı hesabı ihtiyacından çok daha fazlasını okuyup değiştirebiliyor.

## XSS şu durumlarda doğru seçim

- Sayfalarda yorumlar, isimler ya da profiller gibi kullanıcıların ürettiği içerik gösteriliyor.
- Kod, HTML'i innerHTML ya da bir framework'ün ham HTML kaçış kapısıyla ekliyor.
- Arama terimleri ya da URL parametreleri sayfaya geri yansıtılıyor.

## Sık sorulan sorular

**Hangisi daha tehlikeli, SQL injection mı XSS mi?**

SQL injection tek bir saldırıda bütün bir veritabanını açığa çıkarabilir ya da yok edebilir; bu yüzden en kötü senaryosu genellikle daha büyüktür. XSS kullanıcıları tek tek vurur, ama popüler bir sitede birçok hesabı ele geçirebilir.

**ORM kullanmak SQL injection'ı önler mi?**

Normal sorgu metotlarını kullandığınız sürece büyük ölçüde evet. ORM'ler yine de ham SQL yazmanıza izin verir; bunu kullanıcı girdisiyle metinlerden kurmak riski geri getirir.

**React XSS'i önler mi?**

React sayfaya koyduğu değerleri kaçışlar; bu da XSS'in çoğunu engeller. Ama dangerouslySetInnerHTML kullandığınızda ya da güvenilmeyen girdiyi href gibi URL'lere koyduğunuzda sizi koruyamaz.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
