Siteler arası komut dosyası çalıştırma (XSS), saldırganın, kurban web sitesini yüklediğinde yürütülecek meşru bir web sitesine kod eklediği bir istismardır. Bu kötü niyetli kod birkaç şekilde eklenebilir. En popüler olanı, ya bir url’nin sonuna eklenir ya da doğrudan kullanıcı tarafından oluşturulan içeriği görüntüleyen bir sayfaya gönderilir. Daha teknik bir ifadeyle, siteler arası komut dosyası oluşturma, istemci tarafı kod yerleştirme saldırısıdır.

İstemci tarafı kodu nedir? ( client-side code )
İstemci tarafı kodu , bir kullanıcının makinesinde çalışan JavaScript kodudur. Web siteleri açısından, istemci tarafı kodu, genellikle tarayıcı bir web sayfası yükledikten sonra web tarayıcısı tarafından yürütülen koddur. Bu, ana bilgisayarın web sunucusunda yürütülen sunucu tarafı kodunun aksinedir . İstemci tarafı kodu, etkileşimli web sayfalarında çok kullanışlıdır; etkileşimli içerik, her etkileşim olduğunda kullanıcının bilgisayarının web sunucusuyla iletişim kurması gerekmediğinden daha hızlı ve daha güvenilir çalışır. Tarayıcı tabanlı oyunlar, istemci tarafı kodu için popüler bir platformdur, çünkü istemci tarafı kodu, bağlantı sorunlarından bağımsız olarak oyunun sorunsuz çalışmasını sağlayabilir.
İstemci tarafında çalışan kod, modern web geliştirmede çok popülerdir ve çoğu modern web sitesinde kullanılır. Siteler arası kod modern web’in temel unsuru olduğundan, siteler arası komut dosyası çalıştırma en sık bildirilen siber güvenlik açıklarından biri haline geldi ve siteler arası komut dosyası çalıştırma saldırıları YouTube, Facebook ve Twitter gibi büyük siteleri vurdu.
Siteler arası komut dosyası çalıştırma örneği nedir?
Siteler arası komut dosyası çalıştırma saldırılarının yararlı bir örneği, genellikle doğrulanmamış yorum forumlarına sahip web sitelerinde görülür. Bu durumda, bir saldırgan ‘<script></script>’ etiketlerine sarılmış yürütülebilir koddan oluşan bir yorum gönderir. Bu etiketler, bir web tarayıcısına, etiketler arasındaki her şeyi JavaScript kodu olarak yorumlamasını söyler. Bu yorum sayfada olduğunda, başka bir kullanıcı o web sitesini yüklediğinde, script etiketleri arasındaki kötü amaçlı kod, web tarayıcıları tarafından yürütülecek ve saldırının kurbanı olacaktır.
Saldırgan, zarar vermek için siteler arası komut dosyası çalıştırmayı nasıl kullanabilir?
JavaScript’in, kimlik hırsızlığı ve diğer kötü amaçlı amaçlar için kullanılabilecek bazı hassas verilere erişimi olduğundan, JavaScript siteler arası komut dosyası çalıştırma saldırıları popülerdir. Örneğin, JavaScript’in tanımlama bilgilerine* erişimi vardır ve bir saldırgan, bir kullanıcının tanımlama bilgilerini çalmak ve onları çevrimiçi olarak taklit etmek için bir XSS saldırısı kullanabilir. JavaScript, verileri (çalınan çerezler gibi) saldırgana geri göndermek için kullanılabilecek HTTP istekleri de oluşturabilir . Ek olarak, istemci tarafı JavaScript, bir saldırganın coğrafi konum koordinatları, web kamerası verileri ve diğer hassas bilgileri içeren API’lere erişmesine yardımcı olabilir.
Tipik bir siteler arası komut dosyası çalıştırma saldırı akışı aşağıdaki gibidir:
- Kurban bir web sayfası yükler ve kötü niyetli kod kullanıcının çerezlerini kopyalar
- Ardından kod, isteğin gövdesinde çalınan çerezlerle birlikte saldırganın web sunucusuna bir HTTP isteği gönderir.
- Saldırgan daha sonra bu tanımlama bilgilerini bir sosyal mühendislik saldırısı amacıyla kullanıcıyı o web sitesinde taklit etmek ve hatta banka hesap numaralarına veya diğer hassas verilere erişmek için kullanabilir.
*Çerezler, kullanıcının bilgisayarına kaydedilen geçici oturum açma bilgileridir. Örneğin, bir kullanıcı Facebook gibi bir sitede oturum açtığında, site onlara bir tanımlama bilgisi verir, böylece tarayıcı penceresini kapatıp o gün daha sonra Facebook’a geri dönerlerse, tanımlama bilgisi tarafından otomatik olarak kimlikleri doğrulanır ve tekrar oturum açmaları gerekmez. .
Farklı siteler arası komut dosyası çalıştırma türleri nelerdir?
Siteler arası komut dosyası çalıştırma saldırılarının en popüler iki türü, yansıyan siteler arası komut dosyası çalıştırma ve kalıcı siteler arası komut dosyası çalıştırmadır.
Yansıyan siteler arası komut dosyası oluşturma
Bu, en sık görülen siteler arası komut dosyası çalıştırma saldırısıdır. Yansıtılmış bir saldırıyla, bir web sitesinin url’sinin sonuna kötü amaçlı kod eklenir; genellikle bu meşru, güvenilir bir web sitesi olacaktır. Kurban bu bağlantıyı web tarayıcısına yüklediğinde, tarayıcı url’ye enjekte edilen kodu çalıştırır. Saldırgan, kurbanı bağlantıya tıklaması için kandırmak için genellikle bir tür sosyal mühendislik kullanır.
Örneğin, bir kullanıcı, bankasından geldiğini iddia eden meşru görünümlü bir e-posta alabilir. E-posta, bankanın web sitesinde bazı işlemler yapmalarını ve bir bağlantı sağlamalarını isteyecektir. Bağlantı şöyle bir şeye dönüşebilir:
http://legitamite-bank.com/index.php?user=<script>here is some bad code!</script>
URL’nin ilk kısmı güvenli görünse ve güvenilir bir web sitesinin alanını içeriyor olsa da, url’nin sonuna eklenen kod kötü amaçlı olabilir.
Kalıcı siteler arası komut dosyası oluşturma
Bu, örneğin bir yorum forumu veya sosyal medya sitesi gibi, kullanıcıların diğer kullanıcıların göreceği içerik yayınlamasına izin veren sitelerde olur. Site, kullanıcı tarafından oluşturulan içerik için girişleri düzgün bir şekilde doğrulamazsa, bir saldırgan, sayfa yüklendiğinde diğer kullanıcıların tarayıcılarının yürüteceği kodu ekleyebilir. Örneğin, bir saldırgan bir çevrimiçi tanışma sitesine gidebilir, profiline şöyle bir şey koyabilir:
"Hi! My name is Dave, I enjoy long walks on the beach and <script>malicious code here</script>"
Dave’in profiline erişmeye çalışan herhangi bir kullanıcı, Dave’in sürekli siteler arası komut dosyası çalıştırma saldırısının kurbanı olacaktır.
Siteler arası komut dosyası çalıştırma nasıl önlenir
Siteler arası komut dosyası çalıştırmayı azaltmak için tek bir strateji yoktur ve farklı web uygulamaları türleri, farklı koruma düzeyleri gerektirir. Bir dizi koruyucu önlem alınabilir, aşağıda birkaçını özetleyeceğiz.
Mümkünse, girdilerde HTML’den kaçınmak – Siteler arası kalıcı komut dosyası çalıştırma saldırılarından kaçınmanın çok etkili bir yolu, kullanıcıların form girdilerine HTML göndermesini engellemektir. Markdown ve WYSIWYG editörleri gibi, kullanıcıların HTML kullanmadan zengin içerik oluşturmasına izin veren başka seçenekler de vardır.
Girdileri doğrulama – Doğrulama, bir kullanıcının belirli kriterleri karşılamayan bir forma veri göndermesini engelleyen kuralların uygulanması anlamına gelir. Örneğin, kullanıcının “Soyadı”nı soran bir girdi, kullanıcının yalnızca alfasayısal karakterlerden oluşan verileri göndermesine izin veren doğrulama kurallarına sahip olmalıdır. Doğrulama kuralları, “<script>” etiketleri gibi siteler arası komut dosyası oluşturmada yaygın olarak kullanılan tüm etiketleri veya karakterleri reddedecek şekilde de ayarlanabilir.
Verileri temizleme – Verileri temizleme, doğrulamaya benzer, ancak veriler web sunucusuna gönderildikten sonra, ancak yine de başka bir kullanıcıya gösterilmeden önce gerçekleşir. HTML’yi sterilize edebilen ve kötü niyetli kod enjeksiyonlarını filtreleyebilen birkaç çevrimiçi araç vardır.
Tanımlama bilgisi güvenlik önlemleri alma – Web uygulamaları, tanımlama bilgisi işleme için siteler arası komut dosyası çalıştırma saldırıları yoluyla tanımlama bilgisi hırsızlığını azaltabilecek özel kurallar da belirleyebilir. Çerezler, siteler arası komut dosyası çalıştırma saldırganlarının bunlara erişememesi için belirli IP adreslerine bağlanabilir. Ek olarak, JavaScript’in çerezlere tamamen erişmesini engellemek için kurallar oluşturulabilir.
WAF kurallarını ayarlama – Bir WAF , yansıyan siteler arası komut dosyası çalıştırmayı önleyecek kuralları uygulamak için de yapılandırılabilir. Bu WAF kuralları, siteler arası komut dosyası çalıştırma saldırıları dahil olmak üzere sunucuya gelen garip istekleri engelleyecek stratejiler kullanır. Cloudflare WAF , anahtar teslim kurulum sunar ve web uygulamalarını siteler arası komut dosyası çalıştırma, DDoS saldırıları , SQL enjeksiyonu ve diğer yaygın tehditlerden korur.