Logo

Eğitimlerimize katılmak ve kariyerinizde fark yaratmak için bize ulaşın

İletişim

Takip Edin

Cross Site Scripting (XSS) Nedir ve Nasıl Çalışır?

Cross Site Scripting (XSS) Nedir ve Nasıl Çalışır?
Üçüncü Binyıl

Yazar Üçüncü Binyıl

  • 26.11.2025
  • Blog

Cross Site Scripting (XSS) Nedir ve Nasıl Çalışır?

Ekranınızdaki Sinsi Misafir: Bir Geliştiricinin XSS Kabusuyla Yüzleşmesi

Merhaba sevgili okuyucular,

Her geliştiricinin kariyerinde bir "uyanış" anı vardır. Benimkisi, gençlik yıllarımın o alabildiğine coşkulu, biraz da toy dönemlerinde, kendi ellerimle yarattığım bir "forum" projesiyle başladı. Hani şu herkesin hayran kalacağı, tartışmaların alevleneceği, fikirlerin özgürce uçuştuğu o platform hayali... Her satır kodu titizlikle yazmış, her fonksiyonu denediğimden emin olmuştum. Küçük, basit bir HTML kod parçasının tüm hayallerimi nasıl altüst edebileceğini o zamana kadar hayal bile edemezdim.

Acemi Geliştiricinin Yüzleştiği İlk Gerçek Tehdit

Hızla büyüyen forumumda, kullanıcılar mesajlarını paylaşıyor, profillerini güncelliyor ve bol bol gülücük emojisi gönderiyordu. Bir gün, en aktif kullanıcılarımdan birinden tuhaf bir mesaj aldım: "Sitenizde gezinirken kendi kendime pop-up açılıyor, üstelik adres çubuğunda garip şeyler görüyorum. Ben mi bir şey yanlış yapıyorum, yoksa site mi bozuk?" İlk başta önemsemedim, belki tarayıcısında bir eklenti vardır diye düşündüm. Ancak bir sonraki mesaj daha çarpıcıydı: "Profilden kendi kullanıcı adımı değiştirebiliyorum, ama kaydettiğimde başka birinin kullanıcı adı görünüyor, sonra tekrar kendi profilime giriyorum ve yine benimki orada!"

Panikle siteye girdim. Her şey normal görünüyordu. Ama o kullanıcı ısrarcıydı. Birkaç denemenin ardından, onun yaptığı adımları taklit ederek kendi profilimde basit bir yorum bıraktım. Bir HTML etiketi. Sonra bir `<script>` etiketi. İşte o an, tarayıcım benim için beklenen bir sayfa açmak yerine, "Merhaba Dünya!" yazan bir uyarı kutusu gösterdi. Sanki site, kendi kendine konuşmaya başlamıştı. Kalbim yerinden çıkacak gibi atıyordu. Elimdeki fincanı düşürdüm. Bu bir mucize miydi, yoksa bir kabus mu?

Dönüşüm Noktası: XSS ile Tanışma ve Bir Başkasının Gözleriyle Dünyaya Bakmak

O pop-up mesajı, benim için bir dönüm noktası oldu. Yaptığım basit bir yorumla, sitenin tüm kullanıcıları etkileyecek bir kodu çalıştırabilmiştim. Ama nasıl? İşte o panik anında, yıllardır bildiğim ancak tam olarak kavramadığım o iki kelime zihnime kazındı: Cross-Site Scripting. Kısaca XSS. Sanki web'in görünmeyen bir köşesinden, beni izleyen sinsi bir düşmanın varlığını fark etmiştim.

Hemen araştırmaya koyuldum. Günlerce, gecelerce okudum, videolar izledim. İşte bu arayışım sırasında, web güvenliği konusunda derinlemesine bilgiler sunan Üçüncü Binyıl Akademi'nin içerikleriyle karşılaştım. O yazılar ve örnekler, sanki bir pusulanın kuzeyi göstermesi gibi, bana doğru yolu işaret ediyordu. Onların detaylı açıklamaları sayesinde anladım ki, sorun benim aceleci ve yeterince güvenlik odaklı olmayan kodlama anlayışımdaydı. Bir anlığına kendimi, bir başkasının sitesinde, kötü niyetli bir kodu çalıştırıp kullanıcı verilerine göz diken bir saldırganın yerine koydum. Gördüklerim karşısında tüylerim diken diken oldu.

Bir an, o pop-up'ın sadece "Merhaba Dünya!" demekle kalmayıp, belki de bir kullanıcının çerezlerini çalıp, beni kendi oturumuna sokabileceğini, veya tüm forumu reklamlarla doldurabileceğini hayal ettim. Bu basit açığın potansiyeli, benim masum geliştirici zihnimi dehşete düşürmüştü.

XSS Nedir ve Nasıl Çalışır? Hikayenin Perde Arkası

Peki, bu Cross-Site Scripting (XSS) tam olarak neydi ve o minik kod parçası nasıl olmuştu da sitemde böylesine bir kargaşa yaratmıştı? Basitçe anlatmak gerekirse, XSS, saldırganların bir web sitesine kötü amaçlı kod (genellikle JavaScript) enjekte etmesine olanak tanıyan bir tür güvenlik açığıdır. Bu enjekte edilen kod, masum kullanıcılar siteyi ziyaret ettiğinde, onların tarayıcılarında çalıştırılır. Tarayıcı, bu kodu sitenin meşru bir parçasıymış gibi algılar ve ona güvenir. İşte tehlike de tam olarak bu güven ilişkisinde yatıyor.

Hikayemdeki senaryo, tipik bir Reflected XSS (Yansıyan XSS) örneğiydi. Saldırgan (o anki ben), kötü amaçlı betiği URL parametresi, form girdisi veya HTTP başlığı gibi bir yolla sunucuya gönderir. Sunucu, bu girdiyi doğru şekilde temizlemeden veya kodlamadan doğrudan sayfa çıktısına yansıtır. Kullanıcı bu bağlantıya tıkladığında (veya benim durumumda, o yorumu kaydettiğinde), betik kullanıcının tarayıcısında çalışır.

Ancak XSS'in sadece bir türü yok. Üçüncü Binyıl Akademi'nin paylaşımlarından öğrendiğim kadarıyla, başlıca üç XSS türü var ve her biri ayrı bir baş belası:

  • Yansıyan XSS (Reflected XSS): Az önce bahsettiğim gibi, kötü amaçlı betik HTTP isteğinin bir parçası olarak gönderilir ve sunucu tarafından anında sayfa çıktısına yansıtılır. Genellikle phishing saldırıları veya belirli kullanıcıları hedef almada kullanılır.
  • Saklanan XSS (Stored XSS): Belki de en tehlikelisi budur. Saldırganın kodu, web uygulamasının veritabanına kaydedilir (benim forumdaki yorum örneğimi hatırlayın). Bu kod, etkilenen sayfayı her ziyaret eden kullanıcı tarafından çalıştırılır. Forum gönderileri, yorumlar, profil bilgileri gibi yerlerde görülebilir. Etkisi çok daha geniş çaplıdır.
  • DOM Tabanlı XSS (DOM-based XSS): Bu türde, kötü amaçlı betik sunucuya hiç ulaşmayabilir. Saldırı, tamamen tarayıcının Belge Nesne Modeli (DOM) üzerinde, istemci tarafında gerçekleşir. JavaScript kodunun, güvenli olmayan bir şekilde kullanıcı girdisiyle etkileşimde bulunması sonucu ortaya çıkar.

XSS Saldırısının Arkasındaki Amaçlar ve Gerçek Dünya Senaryoları

Peki, bu sinsi saldırılar ne gibi sonuçlar doğurabilir? Neden birileri böyle bir şey yapmak istesin? O küçük pop-up penceresinin ardında yatan potansiyel tehlikeler beni dehşete düşürmüştü:

  • Oturum Çalma (Session Hijacking): Saldırganlar, kullanıcının oturum çerezlerini (cookie) çalarak, o kullanıcının hesabına kendi bilgisayarlarından giriş yapabilirler. Sosyal medya hesabınızdan tutun da, bankacılık uygulamalarınıza kadar birçok platformda bu büyük bir risktir.
  • Kimlik Avı (Phishing): Sitenin görünümünü değiştirerek (sayfa defacement), kullanıcıları sahte bir giriş ekranına yönlendirebilir ve onların hassas bilgilerini (kullanıcı adı, şifre, kredi kartı bilgileri) ele geçirebilirler.
  • Web Sitesi Değişikliği (Defacement): Sitenin içeriğini manipüle ederek, uygunsuz mesajlar veya reklamlar görüntüleyebilirler. Bir e-ticaret sitesinde, ürün açıklamalarını veya fiyatları değiştirebildiklerini düşünün.
  • Keylogger Enjeksiyonu: Kullanıcının tuş vuruşlarını kaydeden bir JavaScript kodu enjekte ederek, yazdığı her şeyi ele geçirebilirler.
  • Kullanıcıları Başka Sitelere Yönlendirme: Kullanıcıları, kötü amaçlı yazılım indirmeye zorlayan veya reklam gelirlerini artırmak için kullanılan başka web sitelerine yönlendirebilirler.

Örneğin, popüler bir e-ticaret sitesinde, bir ürün yorumu bölümüne kötü amaçlı bir kod yerleştirildiğini düşünün. Bu kodu içeren yorumu okuyan her kullanıcı, farkında olmadan saldırganın sitesine yönlendirilebilir veya oturum çerezleri çalınabilir. Ya da bir online bankacılık uygulamasında, XSS ile sayfanın görünümü değiştirilip, kullanıcılardan ekstra güvenlik kodu istendiği sahte bir form oluşturulabilir. İşte tüm bunlar, benim o "Merhaba Dünya!" pop-up'ının ardındaki korkunç potansiyeli anlamamı sağladı.

Güvenli Bir Gelecek İçin: XSS'ten Korunma Yolları ve Sürekli Öğrenmenin Önemi

Bu deneyim, beni sadece bir XSS açığını kapatan bir geliştirici olmaktan öteye taşıdı. Beni, web güvenliğine dair sürekli öğrenmenin ve tetikte olmanın ne kadar kritik olduğunu anlayan, daha bilinçli bir geliştiriciye dönüştürdü. XSS'ten korunmak için atılabilecek adımlar, aslında sandığımızdan çok daha basit ama bir o kadar da önemlidir:

  • Girdi Doğrulama (Input Validation): Kullanıcıdan gelen her veriyi, sunucu tarafında ve istemci tarafında sıkı bir şekilde doğrulamak, beklenmeyen karakterlerin veya betiklerin sisteme sızmasını engellemenin ilk adımıdır. Sadece izin verilen karakterleri ve formatları kabul edin.
  • Çıktı Kodlama (Output Encoding/Escaping): Kullanıcı tarafından girilen ve sayfa üzerinde gösterilecek her veriyi, tarayıcının bir betik olarak değil, salt metin olarak yorumlayacağı bir formata dönüştürmek çok önemlidir. Özellikle HTML içeriği gösteriyorsanız, özel karakterleri ( `<` , `>` , `&` , `"` , `'` ) HTML varlıklarına dönüştürmek hayati bir adımdır.
  • İçerik Güvenliği Politikası (Content Security Policy - CSP): Bu, modern tarayıcıların sunduğu güçlü bir güvenlik katmanıdır. CSP, bir web sayfasının hangi kaynaklardan betikler, stiller ve diğer içerikleri yükleyebileceğini belirlemenize olanak tanır. Böylece, beklenmeyen bir yerden gelen kötü amaçlı betiklerin çalışmasını engellemeye yardımcı olur.
  • Güvenli Kütüphaneler ve Çerçeveler Kullanmak: Modern web geliştirme çerçeveleri (React, Angular, Vue, Django, Laravel vb.), XSS gibi yaygın açıklıklara karşı yerleşik korumalar sunar. Bunları doğru bir şekilde kullanmak, iş yükünüzü hafifletir.
  • Güvenlik Tarayıcıları ve Testleri: Düzenli olarak otomatik güvenlik tarayıcıları çalıştırmak ve sızma testleri (penetration testing) yapmak, gözden kaçan açıkları bulmada yardımcı olabilir.

Bu yolculuk, sadece bir hatayı düzeltmekten öteye geçti. Beni, dijital dünyanın bu sinsi düşmanlarına karşı nasıl bir kalkan öreceğime dair gerçek bir anlayışa kavuşturdu. Web güvenliği, tek seferlik bir görev değil, sürekli bir öğrenme ve adaptasyon sürecidir. Teknolojiler geliştikçe, saldırı yöntemleri de evrimleşiyor. Eğer siz de web güvenliğinin derinliklerine inmek, sitelerinizi XSS ve benzeri tehditlere karşı çelik gibi yapmak istiyorsanız, benim gibi deneyimli profesyonellerin rehberliğinde bu konulara eğilen Üçüncü Binyıl Akademi gibi kaynakları keşfetmenizi şiddetle tavsiye ederim. Unutmayın, güvende olmak bir lüks değil, bir zorunluluktur ve bu yolda attığınız her adım, daha güvenli bir dijital dünya inşa etmemize yardımcı olur.

Etiketler:

XSSCross-Site ScriptingWeb GüvenliğiSiber GüvenlikWeb AçıklarıÜçüncü Binyıl Akademi
Üçüncü Binyıl

Yazar

Üçüncü Binyıl

Blog'da Ara

Blog Kategorileri

Etiketler

Makine Öğrenimi.NET2021 Kariyer Trendleri2D Çizim3D Animasyon3D Baskı3D Görselleştirme3D Modelleme3D Tasarım3DEXPERIENCE3ds Max3Ds Max3ds Max Eğitimi3Ds Max Kursu3DS Max Kursu İstanbul3ds Max SunumAccess ControlACIDAdaptasyonAdobe Illustrator+846 etiket daha