Web Güvenliği XSS (Cross-site Scripting) Zafiyetlerini Anlamak

Web Güvenliği XSS

Web uygulamalarının kullanıcılarla etkileşimi arttıkça, güvenlik açıkları da kaçınılmaz hale geliyor. Bu açıkların en yaygın ve tehlikeli olanlarından biri XSS (Cross-site Scripting) zafiyetidir. Bu yazıda, kendi sitem olan mucahitakin.com üzerinden örneklerle XSS açıklarını nasıl tespit edebileceğimizi, nasıl istismar edildiğini ve nasıl korunabileceğimizi detaylıca ele alacağım.

XSS Nedir?

XSS, kötü niyetli kullanıcıların web sayfalarına zararlı JavaScript kodları enjekte ederek diğer kullanıcıların tarayıcılarında bu kodların çalışmasını sağlamasıdır. Bu sayede kullanıcıların çerez bilgileri, oturum verileri ya da form girdileri gibi hassas bilgileri çalınabilir.

XSS Türleri

  1. Stored XSS (Kalıcı XSS): Kötü amaçlı kod, veritabanına kaydedilir ve her sayfa yüklendiğinde tekrar çalışır.
  2. Reflected XSS (Yansıtılan XSS): Kullanıcının tarayıcısına URL üzerinden gönderilen kötü amaçlı kod, doğrudan yanıtın içinde yansıtılır.
  3. DOM-based XSS: JavaScript tarafında, DOM manipülasyonuyla ortaya çıkan açıklardır.

Senaryo:

mucahitakin.com üzerinde basit bir yorum formu olduğunu varsayalım:

<form method="POST" action="/yorum-gonder">
  <input type="text" name="ad" placeholder="Adınız">
  <textarea name="yorum" placeholder="Yorumunuzu yazın"></textarea>
  <button type="submit">Gönder</button>
</form>

Ve bu yorumlar aşağıdaki gibi sayfaya yansıtılıyor:

<p><strong>Ad:</strong> <?= $_POST['ad'] ?></p>
<p><strong>Yorum:</strong> <?= $_POST['yorum'] ?></p>

Bu durumda kullanıcı, yorum kısmına aşağıdaki gibi bir payload gönderirse:

<script>alert('XSS Testi - mucahitakin.com');</script>

Yorum eklendiğinde bu script doğrudan çalışacaktır. İşte bu, klasik bir Stored XSS zafiyetidir.

XSS Açığı Nasıl Tespit Edilir?

1. Basit Payload Denemeleri

<script>alert(1)</script>
<img src=x onerror=alert(2)>
"><script>alert(3)</script>

Yukarıdaki payload’lar form alanlarına yazılarak veya URL parametrelerine eklenerek test edilebilir.

Otomatik Araçlarla Tespit

  • Burp Suite: Web trafiğini analiz ederek otomatik XSS taramaları yapılabilir.
  • OWASP ZAP: Açık kaynaklı bir güvenlik tarayıcıdır.
  • XSStrike: XSS açığı tespiti için özelleşmiş bir araçtır.

Korunma Yöntemleri

HTML Encode Etme (Escaping)

PHP’de htmlspecialchars() kullanılarak özel karakterler kodlanmalıdır:

<?= htmlspecialchars($_POST['yorum'], ENT_QUOTES, 'UTF-8'); ?>

Content Security Policy (CSP)

Tarayıcıların yalnızca izin verilen kaynaklardan gelen scriptleri çalıştırmasını sağlayan bir HTTP başlığıdır:

Content-Security-Policy: script-src 'self'

Giriş Doğrulama (Input Validation)

Formlara gelen verilerin uzunluğu, formatı ve türü kontrol edilmelidir.

WAF Kullanımı (Web Application Firewall)

ModSecurity gibi uygulama güvenlik duvarları XSS gibi saldırıları önceden engelleyebilir.

Gerçek Hayattan Tehlikeli XSS Örnekleri

  • Facebook’ta bir zamanlar XSS ile kullanıcı oturum bilgileri çalınıp sahte uygulamalara yönlendirme yapılabiliyordu.
  • PayPal, 2019’da bir Reflected XSS açığı nedeniyle 10.000$ ödül vermişti.

Eğer bir geliştiriciyseniz veya bir web sitesinin sahibiyse — örneğin mucahitakin.com gibi — XSS açıklıkları sizin için gerçek bir tehdit olabilir. Gerekli testleri düzenli olarak yapmak, input verilerini doğru şekilde filtrelemek ve kullanıcıdan gelen veriye hiçbir zaman %100 güvenmemek gerekir.

XSS açıklığı küçük gibi görünse de sonuçları ciddi olabilir: kullanıcı verilerinin çalınması, oturumun ele geçirilmesi, yönlendirme saldırıları ve daha fazlası…

Kendi Sitenizi Test Ederken Dikkat Etmeniz Gerekenler

  • Testleri yalnızca kendi ortamınızda (localhost ya da staging) yapın.
  • Zararsız payload’lar kullanın: alert(1), console.log(“test”) gibi.
  • Üçüncü parti script dosyalarını test ortamında geçici olarak engelleyin.

Unutmayın: Güvenlik, bir seferlik değil, sürekli bir süreçtir.

Kaynakça : https://github.com/grealyve/MDISec-Web-Security-and-Hacking-Notes/blob/main/Notlar/0x08%7CXSS_Güvenlik_Zafiyeti_Hakkında_Her_Şey_Part-1.md

Kaynakça : https://portswigger.net/web-security/cross-site-scripting

Leave a Reply

Your email address will not be published. Required fields are marked *