XSS (Cross-Site Scripting), Türkçe açılımıyla “Siteler Arası Komut Dosyası Çalıştırma”, web uygulamalarında yaygın bir güvenlik açığıdır. Bu saldırı türü, kötü niyetli bir kullanıcının tarayıcıya enjekte ettiği, genellikle JavaScript içeren kodları içerir. Bu kodlar, tarayıcı üzerinden başka bir kullanıcıya gönderilir ve tarayıcıda çalıştırıldığında, kullanıcının tarayıcı oturumu ele geçirilebilir, çerezler çalınabilir veya sayfa içeriği değiştirilebilir.
PHP ile yazılmış web uygulamalarında XSS saldırıları genellikle kullanıcı girişleri ile ilişkilidir. Kullanıcıların sağladığı veriler (örneğin, form alanları, URL parametreleri) yeterince doğru bir şekilde filtrelenmez veya kaçınılmaz bir şekilde doğrudan sayfaya eklenirse, bu tür saldırılar mümkün olabilir.
Örneğin, aşağıdaki PHP kodu potansiyel bir XSS açığına neden olabilir:
<?php // Kullanıcıdan gelen veriyi kullanma örneği $user_input = $_GET['input']; echo "Hoş geldiniz, " . $user_input; ?>
Eğer bu kod doğru bir şekilde filtrelenmezse ve kullanıcı bir JavaScript kodunu “input” parametresine eklerse, bu kod tarayıcıda çalıştırılabilir:
http://example.com/index.php?input=<script>alert("XSS");</script>
Bu nedenle, güvenli bir web uygulaması geliştirmek için kullanıcı girişleri iyi bir şekilde doğrulanmalı, filtrelenmeli ve güvenli bir şekilde işlenmelidir. htmlspecialchars() veya htmlentities() gibi fonksiyonlar, kullanıcı girişlerini güvenli bir şekilde işlemek için kullanılabilir. Ayrıca, Content Security Policy (CSP) gibi güvenlik önlemleri de uygulanabilir.
htmlspecialchars:htmlspecialchars
fonksiyonu, belirli HTML karakterlerini HTML özel karakterlerine dönüştürerek, kullanıcı girişlerinin HTML içinde güvenli bir şekilde görüntülenmesini sağlar.
<?php $user_input = '<script>alert("XSS");</script>'; $safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); echo $safe_output; ?>
Bu örnekte, <script>
etiketi içeren kullanıcı girişi güvenli bir şekilde işlenir ve tarayıcıda HTML etiketleri olarak görüntülenmez.
htmlentities:htmlentities
fonksiyonu, htmlspecialchars
gibi çalışır, ancak ayrıca tüm karakterleri HTML sayısal referanslarına dönüştürür. Bu, daha geniş bir karakter kümesini güvenli bir şekilde işlemek için kullanışlı olabilir.
<?php $user_input = '<script>alert("XSS");</script>'; $safe_output = htmlentities($user_input, ENT_QUOTES, 'UTF-8'); echo $safe_output; ?>
Bu örnekte, htmlentities
fonksiyonu kullanılarak aynı şekilde XSS saldırısı önlenir.
Her iki fonksiyonun da ortak kullanımı, kullanıcı girişlerinin HTML içinde güvenli bir şekilde görüntülenmesini sağlamaktır. htmlspecialchars
genellikle yeterli olabilir, ancak daha geniş bir güvenlik yelpazesi isteniyorsa htmlentities
tercih edilebilir. ENT_QUOTES
parametresi, hem tek tırnaklı ('
) hem de çift tırnaklı ("
) özel karakterleri işlemek için kullanılır. 'UTF-8'
ise karakter setini belirtir ve genellikle modern web uygulamalarında kullanılan bir karakter setidir.