Yaygın olarak XSS olarak bilinen Siteler Arası Komut Dosyası Çalıştırma, siber suçlular tarafından kullanılan en tehlikeli saldırı yöntemlerinden biridir, bu nedenle her geliştiricinin ve güvenlik araştırmacısının bunun ne olduğunu ve saldırıları nasıl önleyeceğini bilmesi hayati önem taşır. Peki, XSS güvenlik açığına karşı nasıl önlem alabilirsiniz? Bir web sitesinin kullanıcıdan aldığı verileri göstermek için HTML, JavaScript veya DOM kullanırsınız. Bu üç farklı alandan biri veya birkaçı birlikte çalışabilir.

HTML, JavaScript ve DOM Kullanarak Siteler Arası Komut Dosyası Çalıştırma Nasıl Engellenir?

HTML Kullanarak XSS Nasıl Engellenir?

XSS, saldırganların siteyi ziyaret eden şüphelenmeyen kullanıcıları hedef alarak web sayfalarına kötü amaçlı kodlar veya komut dosyaları eklemesine olanak tanır. Bu, kişisel verileri çalabilir, ziyaretçileri siber suçlu tarafından kurulan başka bir siteye yönlendirebilir veya başka bir şekilde web sayfasının görünümünü değiştirebilir. Ancak bunun olmasını engelleyebilirsiniz; örneğin, HTML eklemelerini durdurarak.

Ziyaretçi defteri olan bir web siteniz olduğunu hayal edin. Diyelim ki bu ziyaretçi defterini kullanan ziyaretçileriniz buraya isimlerini ve mesajlarını yazabiliyor ve mesajları herkese açık olarak görüntülenebiliyor. Ziyaretçi defterinize XSS testi yapmak isteyen bir saldırgan, yazılacak mesaj için ayırdığınız alanı kullanacaktır. O siber suçlu burada bir JavaScript kodu çalıştıracak. Örneğin, bir saldırgan aşağıdaki gibi bir JavaScript kodu kullanabilir:

<script>alert(“The XSS!”)</script>

Saldırganın bunun başarılı olması için bir komut dosyası etiketi kullanması gerekir. Aksi takdirde, JavaScript kodu çalışmayacaktır. Kullanıcıların hiçbir zaman HTML etiketlerini kullanamaması için < ifadesini kodlamanız gerekir. Bu, saldırganın HTML etiketleriyle çalışmasını zorlaştıracaktır.

JavaScript Kullanarak XSS Nasıl Engellenir?

javascript kodlarını xss’e dayanıklı hale getirin

HTML’deki mantık JavaScript’te de geçerlidir . Bazı uygulamalarda, web sitesinin kullanıcıdan aldığı verileri bir JavaScript kodu ile yazdırmak mümkündür.

Bu kodlamayı göz önünde bulundurun:

<p id=”print”></p>

<script>

 document.getElementById(“test”).innerHTML = “<!–?php echo $_GET[“search”]?–>”;

</script>

Bir web sitesinin yukarıdaki gibi bir kod bloğu kullandığını düşünün. Geliştirici burada “print” adlı bir “p” etiketi kullanmıştır. Koddan da görebileceğiniz gibi “search” parametresinden bir değer gelecek ve geliştirici bu gelen değeri “p” etiketi içinde göstermek istiyor. Bu işlemi yapan geliştirici JavaScript’in innerHTML özelliğini kullanmak istemiştir.

Şimdi duruma siber saldırganın bakış açısından bakalım. Böyle bir durumda saldırgan “script” etiketi içerisinde bir XSS testi gerçekleştirecektir. Bunun için zaten kullanılmakta olan bir “script” etiketi olduğundan saldırganın etiketi yeniden başlatmasına gerek yoktur. Saldırgan daha sonra şöyle bir test yazabilir:

filename.php?search=a” alert(“The XSS!”); f= “

Bu kod web sitesinde şu şekilde görünecektir:

document.getElementById(“test”).innerHTML = ” a” alert(“The XSS!”); f=” “;

Bu saldırı başarılı olacaktı. Sorunu daha iyi anlamak için, bir saldırganın kullanabileceği örnek bir tekniği daha inceleyelim. Bilgisayar korsanı, aşağıdaki gibi bir XSS testi uygulamış olabilir:

filename.php?search=”;</script><em>Fatih</em>

Web sitesinden bakıldığında şöyle görünecekti:

document.getElementById(“test”).innerHTML = ” “;</script><em>Fatih</em> “;

Saldırgan burada “/script” gibi bir yapı kullanarak ilk “script” etiketini kapattığı için bu biraz garip gelebilir. Ve böylece, saldırgan istediği herhangi bir JavaScript ve HTML kodunu yeniden başlatabilir.

Bu iki farklı örneği düşündüğünüzde XSS’den korunmak oldukça basit görünüyor. Gerekli önlem ilk örnekte gördüğünüz ” ve ‘ karakterlerini kodlamak olacaktır. İkinci örnekte < ve > karakterlerini kodlayın .

DOM Kullanarak XSS Nasıl Engellenir?

XSS’nin bu varyantında, web sitesinin kullanıcıdan aldığı veriler bir DOM öğesinin özelliğine müdahale edebilir. Örneğin sitenin kullanıcıdan aldığı renk bilgisi bir tablonun arka plan rengini veya sayfanın tüm arka plan rengini etkileyebilir. Böylece kullanıcı farkında olmadan gövde ve tablonun stil düzenlerine müdahale eder. Aşağıdaki kod buna iyi bir örnektir:

<body bgcolor=”<?php echo $_GET[‘color’]; ?>”/>

Bununla web sitesi, “body” öğesinin “bgcolor” özelliğinde doğrudan kullanıcıdan aldığı “color” parametresini kullanır. Peki bir saldırgan bu noktada ne yapabilir? Bu kötü amaçlı kodu çalıştırabilirler:

filename.php?color=red” onload=”alert(‘The XSS!’)

Bu, web sitesinden görüntülendiğinde şöyle görünür:

<body bgcolor=” red” onload=”alert(‘The XSS!’) “/>

Bunun olmasını önlemek için, geliştiricinin ” karakterini kodlaması gerekir.

Ancak, JavaScript’te dikkat edilmesi gereken önemli bir öğe daha vardır. Aşağıdaki kod parçacığı buna bir örnektir:

<a href=”javascript:alert(‘The XSS!’)”>

Bu, bazı JavaScript kodlarını doğrudan çalıştırmanın mümkün olduğu anlamına gelir. En iyi önleyici tedbirlerden biri, web sitesinin kullanıcılardan aldığı verilerin gerçek bir URL olup olmadığını kontrol etmesini sağlamaktır. En basit yöntem, bağlantıda “HTTP” ve “HTTPS” (HTTP’nin güvenli sürümü) gibi ifadelerin olduğundan emin olmaktır .

PHP ile XSS’yi Önlemek İçin Örnek Bir İşlev

PHP kodlarıyla sitenizi XSS saldırılarına karşı koruyun

Bir uygulamayı veya web sitesini XSS saldırılarından nasıl koruyacağınıza dair bazı örnekler gördünüz. Bu tablodaki kod parçacıklarını PHP ile kullanabilirsiniz:

HTML’de kodla

htmlözel karakterler($str, ENT_COMPAT)

JavaScript ve DOM özelliğinde kodlayın

htmlözel karakterler($str, ENT_NOQUOTES)

URL Kontrolü

‘/^(((https?)|(//))).*/’;

Bunların sadece örnek olduğunu ve kullandığınız yazılım diline göre değişebileceğini unutmayın.

PHP ile bir web uygulaması oluşturabilir ve yukarıda gördüğünüz kodları metin olarak göndermek için deneyebilirsiniz. Tüm bu yöntemlerin nasıl kullanılacağını merak ediyorsanız, aşağıdaki PHP kod bloğundan farklı bir dil kullanıyor olsanız bile faydalı olması gereken bazı fikirler edinebilirsiniz:

<?php

$data = $_GET[‘data’];

function in_attribute($str){

 return htmlspecialchars($str, ENT_COMPAT);

 // ENT_COMPAT will encode the double quote (“) character.

}

function in_html($str){

 $link = ‘/^(((https?)|(//))).*/’;

 if(!preg_match($link, $str))

 {

 return “/”;

 }

 return $str;

}

$data = in_attribute($data);

$data = in_html($data);

$data = real_url(data);

?>

Web Sitenizi XSS ve Daha Fazlasından Koruyun

XSS, bilgisayar korsanları tarafından kullanılan popüler bir saldırı vektörüdür. Genellikle, URL’deki bir yol değeri, web sitenizde verilerin girilebileceği herhangi bir alan (formlar ve yorum alanları gibi), bir XSS güvenlik açığını test etmek için kullanılabilir. Ancak elbette siber suçluların bir siteye saldırmak için kullanabileceği pek çok farklı yöntem vardır, özellikle de çok sayıda kullanıcısı olan ve onların bilgilerini gizleyen bir web siteniz varsa.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir