XSS Saldırıları: Tehditler, Örnekler ve Önlemler

3

Gülnisa Demir

 10 dk. ·  10 Ağu

42kraft
İÇİNDEKİLER
BU YAZIYI PAYLAŞIN

XSS (Cross-Site Scripting), bir web uygulamasına kötü niyetli kod eklenmesi ve bu kodun diğer kullanıcıların tarayıcılarında çalıştırılması saldırısıdır. XSS saldırıları, genellikle kullanıcının tarayıcısında kötü niyetli JavaScript kodları çalıştırarak, kullanıcıların hassas bilgilerini çalmak veya web uygulamasının işleyişini bozmak amacıyla gerçekleştirilir.

XSS Saldırıları ve Kategorileri

XSS (Cross-Site Scripting) saldırıları, web uygulamalarında güvenlik açıklarından yararlanarak kötü niyetli kodların kullanıcıların tarayıcılarında çalıştırılması saldırılarıdır. XSS saldırıları üç ana kategoriye ayrılır: Depolanan XSS saldırıları, Yansıtılan XSS ve DOM Tabanlı XSS. Bu kategoriler, saldırının nasıl gerçekleştirildiğine ve hedeflenen açıkların türüne bağlı olarak farklılık gösterir. İşte bu üç ana kategoriye dair ayrıntılı açıklamalar:

1. Depolanan XSS (Stored XSS)

Depolanan XSS saldırıları, kötü niyetli kodun bir web uygulamasının veri depolama alanına (veritabanı, dosya sistemi vb.) kaydedilmesi ve daha sonra bu verinin diğer kullanıcılara gösterilmesi ile gerçekleşir. Bu tür XSS saldırıları, genellikle kullanıcının uygulamaya veri girdiği alanlarda, bu verinin saklandığı ve ardından başka kullanıcılar tarafından erişildiği durumlarda ortaya çıkar.

Örnek Senaryo: Bir forumda bir kullanıcı kötü niyetli JavaScript kodu içeren bir yorum bırakabilir. Bu yorum, forum veritabanına kaydedilir ve başka kullanıcılar bu yorumu görüntülediklerinde, kötü niyetli kod tarayıcılarında çalıştırılır. Bu sayede, saldırgan kullanıcıların çerez bilgilerini çalabilir, oturumlarını ele geçirebilir veya sayfanın içeriğini değiştirebilir.

Korunma Yöntemleri:

  • Kullanıcıdan gelen verileri doğrulama ve temizleme: Kötü niyetli karakterleri ve kodları temizleyerek veri girişlerini güvenli hale getirin.
  • Çıkış kodlama: Verileri HTML içeriğine dahil ederken özel karakterleri kaçırarak, kodların tarayıcı tarafından çalıştırılmasını engelleyin.
  • İçerik Güvenliği Politikası (CSP): Bu politika ile, yalnızca güvenilir kaynaklardan gelen içeriklerin yüklenmesini sağlayarak saldırıları önleyebilirsiniz.

2. Yansıtılan XSS (Reflected XSS)

Yansıtılan XSS, kötü niyetli kodun, genellikle kullanıcı tarafından bir URL veya HTTP isteği aracılığıyla gönderilmesiyle ve bu kodun hemen yanıt olarak tarayıcıda çalıştırılmasıyla gerçekleşir. Bu tür saldırılar, genellikle kullanıcıların URL parametreleri, arama formları veya diğer giriş alanları aracılığıyla kötü niyetli kod gönderdiği durumlarda ortaya çıkar.

Örnek Senaryo: Bir web uygulaması, arama terimlerini URL parametresinden alır ve doğrudan HTML çıktısına dahil eder. Bir saldırgan, bu URL'yi kötü niyetli JavaScript kodu ile manipüle edebilir ve hedef kullanıcı bu URL'yi ziyaret ettiğinde, kötü niyetli kod tarayıcıda çalıştırılır.

Korunma Yöntemleri:

  • URL ve kullanıcı girdilerini doğru şekilde doğrulama: Kullanıcılardan alınan verileri temizleyerek zararlı kodların dahil edilmesini engelleyin.
  • Çıkış kodlama: Verileri HTML çıktısına eklerken, özel karakterleri kaçırarak tarayıcıya verilerin sadece veri olduğunu belirtin.
  • Güvenli form işleme: Kullanıcıların gönderdiği verileri sunucuda işlemeye geçmeden önce temizleyin ve doğrulayın.

3. DOM Tabanlı XSS (DOM-based XSS)

DOM Tabanlı XSS, kötü niyetli kodun, web sayfasının Document Object Model (DOM) yapısında değişiklik yaparak çalıştırılmasıyla gerçekleşir. Bu tür saldırılar, JavaScript kodunun sayfanın DOM yapısını dinamik olarak değiştirmesiyle ortaya çıkar ve genellikle tarayıcı tarafında gerçekleştirilir.

Örnek Senaryo: Bir web uygulaması, kullanıcının URL'sindeki parametreleri alır ve DOM'da bazı öğeleri dinamik olarak günceller. Bir saldırgan, URL'deki parametreleri kötü niyetli JavaScript kodlarıyla değiştirirse, bu kodlar DOM manipülasyonu ile çalıştırılır ve tarayıcıda kötü niyetli etkiler yaratır.

Korunma Yöntemleri:

  • DOM manipülasyonlarını güvenli şekilde yapma: Kullanıcıdan gelen verileri doğrudan DOM'a eklemek yerine, güvenli yöntemler kullanarak işlemler gerçekleştirin.
  • Güvenli JavaScript kullanımı: JavaScript kodlarınızı dikkatlice yazın ve kullanıcının girdilerini doğrudan DOM'a dahil etmemeye özen gösterin.
  • Verileri doğrulama ve temizleme: Kullanıcıdan gelen tüm verileri işlemden önce doğrulayarak ve temizleyerek zararlı kodların etkisini en aza indirin.

XSS Saldırılarına Karşı Alınması Gereken Önlemler

XSS (Cross-Site Scripting) saldırıları, web uygulamalarının güvenliğini ciddi şekilde tehdit edebilir. Bu tür saldırılardan korunmak için çeşitli güvenlik önlemleri alınmalıdır. Aşağıda, XSS saldırılarına karşı alınması gereken önlemler ayrıntılı bir şekilde açıklanmıştır:

1. Girdi Doğrulama ve Temizleme

Girdi doğrulama ve temizleme, kullanıcıdan alınan verilerin güvenliğini sağlamak için temel adımlardan biridir. Bu süreç, verilerin beklenen formatta olup olmadığını kontrol eder ve zararlı karakterleri temizler.

  • Girdi Doğrulama: Kullanıcının gönderdiği verileri, uygulamanızın kabul ettiği format, uzunluk ve tür gibi kriterlere göre kontrol edin. Örneğin, bir e-posta adresinin geçerli bir formatta olup olmadığını kontrol edebilirsiniz.
  • Girdi Temizleme: Kullanıcının gönderdiği verilerdeki zararlı karakterleri ve kodları temizleyin. Örneğin, HTML özel karakterlerini HTML entity’lerine dönüştürmek için htmlspecialchars() veya htmlentities() fonksiyonlarını kullanabilirsiniz.

Örnek PHP Kodları:

// HTML karakterlerini kaçırma
$safe_input = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

// Veri doğrulama örneği
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
// Geçersiz e-posta
}

2. Çıkış Kodlama (Output Encoding)

Çıkış kodlama, verilerin web sayfasına eklenmeden önce güvenli bir şekilde işlenmesini sağlar. Bu, tarayıcıya verilerin sadece veri olduğunu ve çalıştırılmaması gerektiğini belirtir.

  • HTML Çıkış Kodlama: HTML içeriğine veri eklerken özel karakterleri kaçırarak, kötü niyetli kodların çalışmasını engelleyebilirsiniz. Örneğin, <, >, & ve " gibi karakterlerin kaçırılması gerekir.
  • JavaScript Çıkış Kodlama: JavaScript kodlarının içerisine kullanıcı verilerini dahil ederken, karakterlerin doğru şekilde kaçırıldığından emin olun.

Örnek PHP Kodları:

// HTML kodlama
$safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

// JavaScript kodlama
$safe_output = json_encode($user_input);

3. İçerik Güvenliği Politikası (Content Security Policy - CSP)

CSP, bir web sayfasının hangi kaynaklardan içerik yükleyebileceğini belirleyen bir güvenlik özelliğidir. CSP uygulamak, yalnızca güvenilir kaynaklardan gelen içeriklerin yüklenmesini sağlar ve XSS saldırılarını önleyebilir.

  • CSP Başlığı: Web sunucunuzun HTTP başlıkları ile CSP'yi yapılandırabilirsiniz. Bu başlık, hangi kaynaklardan script, stil ve diğer içeriklerin yüklenebileceğini belirler.

Örnek CSP Başlığı:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self';

4. HTTP Güvenlik Başlıkları

HTTP güvenlik başlıkları, web uygulamanızın tarayıcı ile etkileşiminde güvenliği artırmak için kullanılır. Bu başlıklar, bazı saldırı türlerini önlemek için ek bir koruma sağlar.

  • X-Content-Type-Options: nosniff değeri, tarayıcının içerik türünü kendisinin tahmin etmesini engeller.
  • X-XSS-Protection: 1; mode=block değeri, bazı tarayıcılarda XSS korumasını etkinleştirir.

Örnek HTTP Başlıkları:

X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

5. Güvenli JavaScript Kullanımı

JavaScript kullanırken dikkat edilmesi gereken önemli güvenlik önlemleri bulunmaktadır. DOM manipülasyonları ve kullanıcı girdileri ile etkileşimde bulunurken güvenlik önlemlerini göz önünde bulundurmak gerekir.

  • DOM Manipülasyonları: Kullanıcı verilerini doğrudan DOM’a eklerken, bu verilerin temizlenmiş ve kodlanmış olduğundan emin olun.
  • JavaScript Framework Kullanımı: Modern JavaScript frameworkleri ve kütüphaneleri, otomatik olarak veri temizleme ve kodlama özellikleri sağlar.

Örnek JavaScript Kodları:

// Güvenli DOM manipülasyonu
var element = document.createElement('div');
element.textContent = userInput; // textContent kullanarak XSS riskini azaltır

// Güvenli JavaScript kodu
var safeData = encodeURIComponent(userInput);

6. Veritabanı Güvenliği

Veritabanı güvenliği, XSS saldırılarından korunmak için önemlidir, özellikle SQL enjeksiyonu gibi diğer saldırı türlerine karşı da koruma sağlar.

  • Hazırlanan İfadeler (Prepared Statements): SQL sorgularında kullanıcı girdilerini güvenli bir şekilde işlemek için hazırlanan ifadeleri kullanın. Bu, kullanıcı verilerini sorguya doğrudan eklemeyi engeller ve SQL enjeksiyonu gibi saldırılara karşı korur.

Örnek PHP Kodları:

// Hazırlanan ifadeler
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $user_input]);

7. Güvenlik Güncellemeleri ve Yamalar

Web uygulamanızda kullanılan yazılımların, kütüphanelerin ve frameworklerin düzenli olarak güncellenmesi önemlidir. Güvenlik açıkları genellikle güncellemelerle kapatılır ve yamalarla düzeltilir.

  • Yazılım Güncellemeleri: Uygulamanızda kullanılan tüm bileşenlerin güncel olduğundan emin olun. Güvenlik güncellemeleri ve yamaları düzenli olarak uygulayın.

8. Kullanıcı Geri Bildirimlerini Değerlendirme

Kullanıcı geri bildirimleri, XSS saldırıları zafiyetlerini tespit etmek için önemli bir kaynaktır. Güvenlik testleri ve kullanıcı raporları, olası açıkların belirlenmesine yardımcı olabilir.

  • Güvenlik Testleri: Düzenli güvenlik testleri ve penetrasyon testleri ile uygulamanızın zayıf noktalarını belirleyin.
  • Kullanıcı Raporları: Kullanıcılardan gelen güvenlik raporlarına dikkat edin ve tespit edilen açıkları hızla düzeltin.

Sonuç

XSS saldırıları, web uygulamalarının güvenliğini ciddi şekilde tehdit edebilir. Ancak, doğru güvenlik önlemleri alarak ve en iyi uygulamaları takip ederek bu tür saldırılardan korunmak mümkündür. Girdi doğrulama, çıkış kodlama, güvenlik politikaları ve güncellemeler gibi önlemler, uygulamanızın güvenliğini artıracak ve XSS saldırılarına karşı etkili bir savunma sağlayacaktır.

✤ Daha fazla bilgi için buraya tıklamayı unutmayın!

✤ Bu yazımızı beğendiyseniz bir önceki yazımıza da göz atmayı unutmayın :)

42kraft


# İlginizi çekebilecek diğer içerikler
İlginizi çekebilecek diğer içerikler