Cross-Site Scripting (XSS) Zafiyetleri
Önem derecesiYüksek
enRead this article in EnglishSunucu tarafında, istemci çalıştırılabilir kodunun değiştirilmesine karşı bir önlem alınmadıysa, istemci kodu saldırgan tarafından değiştirilebilir. Eğer sisteminiz XSS ataklarına karşı zafiyet gösteriyorsa, saldırgan tarafından enjekte edilen kod istemci tarafında çalıştırılabilir. Bu durumda saldırgan istemci çerezleri, oturum bilgileri gibi tüm global değişkenlere ulaşabilir ve bu değişkenler üzerinde değişiklik yapabilir.
Neden XSS Saldırılarına Maruz Kalıyoruz
İnternet kullanılmaya başlandığı 90’lı yıllarda tüm servisler konsol adı verilen siyah ekran üzerinde çalışmaya başladı. Windows ve Mac Os gibi görsel tabanlı işletim sistemlerinin yaygınlaşmasıyla beraber, görsel destekli web tarayıcıları da kendisini göstermeye başladı.

İlk başlarda web sitelerinin çoğunda sayfa içeriği önceden bir bilgisayarda hazırlanır ve sunucuya gönderilirdi. Bu sayfalar çoğunlukla statik içeriğe sahip olup, kullanıcıya göre farklılık göstermezdi. PHP gibi yüksek seviyeli dillerin yaygınlaşmasından önce, sayfalar arasında bilgi aktarımı sağlayan SCGI protokolü geliştirildi. Bu protokol sunucu tarafında ise cgi adı verilen betikler tarafından işlenebiliyordu. Yazması pek zahmetli olan perl (cgi), anlaması da bir o kadar zor olan bir dildi. Yüksek seviyeli dillerin kullanımının yaygınlaşması ile birlikte, kullanıcı deneyimi sunan web sitelerinde artış olmaya başladı. Şifre ile girilen alanlar, kişiselleştirilmiş sosyal medya gibi WEB2.0 hizmetleri, daha önceden gezmiş olduğunuz bir siteyi tekrar ziyaret ettiğinizde, sizi hatırlamak için tarayıcınızda birden çok iz bırakabilir. Biz bunlara “çerez” (cookie) diyoruz.
Bu çerezler web tabanlı yazılımların ilk örneklerinde şifrelenmeden tarayıcı deposunda saklanırdı. Bu çerezlerin bir tarayıcı deposundan başka bir tarayıcı deposuna taşınması durumunda, o tarayıcıda da oturumun açılabildiği ya da özel bilgilere ulaşılabildiği gözlemlenmiştir. Bunun yanı sıra, çerezler üzerinde yapılan değişiklikler sayesinde, saldırganların başka kullanıcıların ya da yöneticilerin bilgilerine de erişebildikleri tespit edilmiştir.
Site trafiğinin SSL üzerinden iletilmesi, çerezlerin okunabilirliğini değiştirmemektedir.
Bu nedenle çerez kullanan web siteleri, tasarım aşamasında uzak noktadaki çerezlerin sadece sunucuda anlam kazanacağı şekilde şifrelenmesi gerekmektedir. Günümüzde tüm yazılım dilleri, bu şifrelemeyi yapabilecek blow fish gibi kütüphanelerle gelmektedir. Bu kütüphaneler hem verinin okunmasını olanaksız hale getirir, hem de depolanan verinin değiştirilmediğinin kontrolünü sağlayabilir.
Çözüm
XSS ataklarından korunmak için aşağıdaki çözümleri kullanabilirsiniz:
- Kullanıcı tarayıcısından gelen değerlere asla güvenmeyin, sayfaya gönderdiğiniz işlenecek değerlerin bir kopyasını veri tabanında ya da çerezler ile şifrelenmiş şekilde saklayıp geri dönen değerleri kontrol edin.
- Tüm oturum değerleri ve çerezleri bir anahtar kelime ile şifreleyin (hash).
- Kullanıcıdan geri dönen değerleri direk sistem içerisine göndermeyin, mutlaka bir yönlendirme scripti kullanın.
- Kullandığınız scripting dilinin sağlamış olduğu XSS korumalarından faydalanın
- URL encoding kullanın, örneğin < işareti yerine < kullanın