Cross-Site Scripting (XSS) Nedir?
Düşünsenize, bir forum veya sosyal medya platformu kullanıyorsunuz. Kullanıcılar yorum yapabiliyor ve bu yorumlar web sayfasında diğer kullanıcılara gösteriliyor. Eğer yorumlar doğru şekilde filtrelenmezse, bir saldırgan, yorum kısmına kötü amaçlı JavaScript kodu yerleştirebilir. Bu kod, başka kullanıcıların tarayıcılarında çalışarak gizli bilgilerini çalabilir veya zarar verebilir.
XSS Saldırıları Nasıl Gerçekleşir?
1. Stored XSS (Depolanmış XSS): Bu tür saldırılarda, zararlı kodlar sunucuya kaydedilir ve daha sonra diğer kullanıcılar bu sayfalara eriştiğinde çalıştırılır. Örneğin, bir kullanıcının yorum yaptığı ve bu yorumun sunucuda saklandığı bir sistemde, kötü amaçlı bir kodun başka kullanıcılara zarar vermesi mümkündür.
2. Reflected XSS (Yansıtılan XSS): Bu saldırıda, zararlı kodlar bir URL üzerinden iletilir. Kullanıcı bir linke tıkladığında, bu linkteki zararlı kodlar tarayıcıda çalıştırılır. Buradaki tehlike, saldırganın kullanıcının tıklama eylemini kandırarak kötü amaçlı kodları aktive etmesidir.
3. DOM-based XSS: Bu saldırı türü, kullanıcı tarayıcısındaki Document Object Model (DOM) üzerinde yapılan değişikliklerden yararlanır. Bu tür saldırılar, özellikle modern web uygulamalarında, JavaScript'in etkileşimli özelliğinden faydalanarak gerçekleşir.
XSS Saldırılarından Nasıl Korunursunuz?
1. Kullanıcı Girdisini Doğru Şekilde Filtreleme: En önemli güvenlik önlemlerinden biri, kullanıcıdan gelen veriyi doğru şekilde kontrol etmek ve filtrelemektir. Özellikle HTML ve JavaScript kodları içeren verileri kabul etmemek, XSS saldırılarını engellemek için kritik bir adımdır.
2. Content Security Policy (CSP) Uygulaması: CSP, web sayfanızda çalışan JavaScript kodlarının yalnızca güvenli kaynaklardan yüklenmesine izin verir. Bu politika, kötü niyetli bir saldırganın zararlı kod yüklemesini engelleyebilir.
3. Output Encoding (Çıktı Kodlaması): Kullanıcı girdisi sayfanızda görüntülenmeden önce doğru şekilde kodlanmalıdır. Böylece HTML ya da JavaScript kodu olarak yorumlanmak yerine, metin olarak gösterilir.
4. HTTPOnly ve Secure Flag'leri: Çerezlerinizi (cookies) doğru şekilde yapılandırmak da önemlidir. HTTPOnly ve Secure bayrakları, çerezlerin yalnızca güvenli bir şekilde iletilmesini sağlar ve JavaScript'in bu çerezlere erişmesini engeller.
5. Güçlü Validasyon: Sunucu tarafında yapılan doğrulama, sadece izin verilen verilerin kabul edilmesini sağlar. Bu, XSS saldırılarının gerçekleşme olasılığını önemli ölçüde azaltır.
XSS İçin Örnek Bir Kod Parçası
// Kullanıcıdan gelen veri
var userInput = document.getElementById('comment').value;
// Kullanıcının yorumunu doğrudan sayfada görüntülemek
document.getElementById('user-comments').innerHTML = userInput;
Yukarıdaki kod, kullanıcının girdiği yorumları sayfada görüntülemeye yönelik bir işlevi göstermektedir. Ancak, bu şekilde doğrudan kullanıcının girdiği metni HTML olarak eklemek, XSS saldırılarına yol açabilir. Örneğin, kötü niyetli bir kullanıcı şu şekilde bir yorum yazarsa:
```html
```
Bu kod, sayfada çalışarak basit bir uyarı mesajı gösterir, ancak daha karmaşık saldırılar da mümkündür. Bu nedenle, kullanıcı girdilerini güvenli bir şekilde işlemek son derece önemlidir.