Introduction to Web Applications
Introduction to Web Applications
Giriş (Introduction)
Web uygulamaları, web tarayıcılarında çalışan etkileşimli uygulamalardır. Web uygulamaları genellikle etkileşimleri çalıştırmak ve yönetmek için client-server (istemci-sunucu) mimarisini benimser. Tipik olarak:
- Front end (ön yüz) bileşenleri vardır (yani web sitesi arayüzü, “kullanıcının gördüğü şey”) ve istemci tarafında (tarayıcıda) çalışır.
- Diğer back end (arka uç) bileşenleri vardır (web uygulamasının kaynak kodu) ve sunucu tarafında (back end sunucuları/veritabanları) çalışır.
Bu yapı; kurumların tasarım ve işlev üzerinde neredeyse gerçek zamanlı tam kontrol sağlarken, aynı zamanda uygulamaların dünya çapında erişilebilir olmasına imkan verir. Tipik web uygulamalarına örnek olarak Gmail gibi çevrim içi e-posta servisleri, Amazon gibi çevrim içi perakendeciler ve Google Docs gibi çevrim içi kelime işlemciler verilebilir.

Web uygulamaları sadece Google veya Microsoft gibi dev sağlayıcılara özel değildir; herhangi bir web geliştiricisi tarafından geliştirilip yaygın barındırma (hosting) servislerinde yayınlanabilir ve internetteki herkes tarafından kullanılabilir. Bu yüzden günümüzde internette milyonlarca web uygulaması var ve milyarlarca kullanıcı her gün bunlarla etkileşime giriyor.
Web Uygulamaları vs. Web Siteleri (Web Applications vs. Websites)
Geçmişte, statik ve gerçek zamanlı değiştirilemeyen web siteleriyle etkileşime girerdik. Bu şu anlama gelir:
- Geleneksel web siteleri, belirli bilgileri göstermek için statik olarak hazırlanırdı.
- Kullanıcı etkileşimiyle içerik değişmezdi.
- İçeriği değiştirmek için ilgili sayfanın geliştiriciler tarafından manuel düzenlenmesi gerekirdi.

Bu tip statik sayfalar fonksiyon içermez; dolayısıyla gerçek zamanlı değişim üretmez. Bu yaklaşım genelde Web 1.0 olarak anılır.
Kıyas:
- Website: Statik sayfalar, herkes için aynı
- Web app: Dinamik/etkileşimli sayfalar, kullanıcıya göre değişebilir
Buna karşılık, günümüzde çoğu site, kullanıcı etkileşimine göre dinamik içerik sunan web uygulamalarını çalıştırır (Web 2.0). Bir diğer önemli fark: web uygulamaları son kullanıcı için çeşitli işlevleri gerçekten yapabilir , web siteleri ise bu düzeyde fonksiyonellikten yoksun olabilir.
Geleneksel web siteleri ile web uygulamaları arasındaki diğer temel farklar:
- Modüler olmaları
- Her ekran boyutunda çalışabilmeleri
- Platforma özel optimize edilmeden farklı platformlarda çalışabilmeleri
Web Uygulamaları vs. Yerel İşletim Sistemi Uygulamaları (Native OS Apps)
Yerel işletim sistemi (native OS) uygulamalarının aksine web uygulamaları platform bağımsızdır ve herhangi bir işletim sisteminde tarayıcı üzerinden çalışabilir.
Ayrıca:
- Web uygulamaları kullanıcı cihazına kurulmak zorunda değildir.
- Çalışma ve işlevler uzaktaki sunucuda yürütüldüğü için, son kullanıcının diskinde genellikle yer kaplamaz.
Bir diğer avantaj: version unity (sürüm birliği) . Web uygulamasına erişen herkes aynı sürümü kullanır ve uygulama, her kullanıcıya tek tek güncelleme dağıtmadan, tek bir yerden (web sunucusu) güncellenip değiştirilebilir. Bu da bakım ve destek maliyetlerini ciddi şekilde azaltır.
Öte yandan, yerel uygulamaların bazı artıları vardır:
- Daha hızlı çalışırlar (yüklenme ve etkileşim)
- İşletim sisteminin yerel kütüphanelerini ve donanımı daha iyi kullanabilirler
- OS ile daha derin entegre oldukları için genellikle daha “yeteneklidirler” (tarayıcı sınırlarına takılmazlar)
Son dönemde ise hybrid ve progressive web applications (PWA) daha yaygın hale geldi. Modern framework’lerle web uygulamalarını, yerel OS kabiliyetlerini kullanacak şekilde çalıştırarak klasik web uygulamalarına göre daha hızlı ve daha güçlü hale getirmeyi hedeflerler.
Web Uygulaması Dağıtımı (Web Application Distribution)
Dünya genelinde kurumlar tarafından kullanılan, özelleştirilebilir birçok open-source (açık kaynak) web uygulaması vardır. Örnekler:
- WordPress
- OpenCart
- Joomla
Ayrıca proprietary / closed source (kapalı kaynak) web uygulamalar da vardır. Bunlar genellikle bir kuruluş tarafından geliştirilir; başka bir kuruluşa satılır ya da abonelik modeliyle kullandırılır. Örnekler:
- Wix
- Shopify
- DotNetNuke
Web Uygulamalarının Güvenlik Riskleri (Security Risks of Web Applications)
Web uygulama saldırıları çok yaygındır ve web varlığı olan çoğu kurum için, boyutu ne olursa olsun, ciddi bir challenge oluşturur. Çünkü web uygulamaları genellikle:
- İnternet bağlantısı ve tarayıcı olan herkes tarafından,
- Her ülkeden erişilebilir,
- Dolayısıyla geniş bir attack surface (saldırı yüzeyi) sunar.
Yanlış ellerde ciddi zarar verebilecek otomatik tarama/saldırı araçları da bolca mevcut. Web uygulamaları daha karmaşık ve gelişmiş oldukça, tasarıma kritik zafiyetlerin “sızma” ihtimali de artar.
Başarılı bir web uygulama saldırısı:
- Büyük kayıplara,
- Ciddi iş kesintilerine,
- Hassas kullanıcı/kurum verilerinin ele geçirilmesin
yol açabilir. Çünkü web uygulamaları çoğu zaman sunucularda çalışır, başka hassas sistemlere bağlıdır ve veritabanlarında hassas data tutar. Bu yüzden web uygulamalarını düzenli test etmek, zafiyetleri hızlı yamamak ve yamanın yeni bir zafiyet üretmediğinden emin olmak kritiktir.
Web application penetration testing (web uygulama sızma testi) giderek daha kritik bir yetenek haline geliyor. İnternete açık (ve iç ağdaki) web uygulamalarını güvence altına almak isteyen kurumlar; sık aralıklarla test yapmalı ve her geliştirme yaşam döngüsü aşamasında güvenli kodlama pratiklerini uygulamalı.
Pentest’i doğru yapmak için şunları anlamamız gerekir:
- Web uygulamaları nasıl çalışır?
- Nasıl geliştirilir?
- Kullanılan teknolojilere göre her katmanda/bileşende ne tür riskler vardır?
Web uygulamalar her zaman farklı tasarım ve konfigürasyonlarla karşımıza çıkar. Güncel ve yaygın kullanılan test metodolojilerinden biri: OWASP Web Security Testing Guide .
Yaygın yaklaşım:
Önce web uygulamasının front end bileşenleri (HTML, CSS, JavaScript — “front end trinity”) incelenir.
- Örn: Sensitive Data Exposure , Cross-Site Scripting (XSS) gibi zafiyetler aranır.
- Sonra uygulamanın çekirdek fonksiyonları ve tarayıcı–web sunucusu etkileşimi incelenir:
- Web sunucusunun kullandığı teknolojiler enumerate edilir,
- İstismar edilebilir açıklar aranır.
- Kapsamı maksimize etmek için hem unauthenticated hem authenticated (login varsa) perspektiften test yapılır.
Web Uygulamalarına Saldırmak (Attacking Web Applications)
Günümüzde çoğu şirketin dış çevresinde (external perimeter) bir veya daha fazla web uygulaması vardır. Bunlar:
- Basit statik sitelerden,
- WordPress gibi CMS ’lerle çalışan bloglara,
- Kayıt/giriş (sign-up/login), farklı roller (basic user → super admin) içeren karmaşık uygulamalara
kadar değişebilir.
Artık dışarıya açık bir host’ta doğrudan bilinen public exploit ile “tek atış” (ör. zafiyetli servis veya Windows remote code execution (RCE) açığı) bulmak çok sık değildir ama hâlâ olur. Web uygulamaları ise geniş saldırı yüzeyi sağlar ve dinamik oldukları için sürekli değişir (ve bazen gözden kaçar). Küçük bir kod değişikliği bile felaket bir zafiyet veya zincirlenebilir açıklar üretebilir; bu da hassas veriye erişim, web sunucusunda RCE veya ortam içindeki diğer sistemlere (ör. database server) sıçrama ile sonuçlanabilir.
Kod çalıştırmaya giden zafiyetler hiç de nadir değildir, örneğin:
- Kötü niyetli kod yüklemeye izin veren bir file upload formu
- File Inclusion açığı ile RCE elde edilmesi
Hâlâ çok yaygın bir diğer zafiyet: SQL injection . Kullanıcı girdisinin güvensiz işlenmesinden doğar ve şunlara yol açabilir:
- Hassas veriye erişim
- DB sunucusunda dosya okuma/yazma
- Hatta RCE
Active Directory ile kimlik doğrulaması kullanan web uygulamalarında da SQL injection görebiliriz. Genellikle buradan doğrudan parola çekemeyiz (AD parolaları yönetir) ama çoğu zaman AD kullanıcı e-postalarını (genellikle kullanıcı adıyla aynı) çekebiliriz. Bu veriyle:
- VPN portalları,
- Microsoft Outlook Web Access / Microsoft O365 gibi
AD ile login olan sistemlere password spraying saldırısı yapılabilir. Başarılı olursa e-posta gibi hassas verilere erişim veya kurumsal ağa ilk giriş (foothold) sağlanabilir.
Bu örnek, tek bir web uygulama zafiyetinin bile (özellikle zincirlenirse) ne kadar büyük etki yaratabileceğini gösterir. İyi bir infosec profesyoneli; web uygulamalarını derinlemesine anlamalı, web uygulamalarına saldırma konusunda da network pentest ve AD saldırıları kadar rahat olmalıdır. Web temeli güçlü bir pentester; başkalarının kaçırdığı açıkları yakalayabilir.
Gerçek dünyadan örnek etki senaryoları:
ZafiyetGerçek Dünya SenaryosuSQL injectionActive Directory kullanıcı adlarını elde edip VPN veya e-posta portalına password spraying yapmakFile InclusionSource code okuyup gizli bir sayfa/dizin bularak ek fonksiyonlara erişmek ve RCE’ye gitmekUnrestricted File UploadProfil fotoğrafı yüklemede dosya tipini sınırlamayıp kötü amaçlı kod yükletmek; sunucunun kontrolünü ele geçirmekInsecure Direct Object Referencing (IDOR)Broken access control ile birleşince başka kullanıcının dosyalarına/işlevlerine erişmek. Örn: /user/701/edit-profile → 701 yerine 702 yazıp başka kullanıcının profilini düzenlemekBroken Access ControlKayıt olurken role parametresini manipüle ederek yetki yükseltmek. Örn POST içinde roleid=3 yerine 0/1 yapıp admin olarak kayıt olmak
Bu terimler şu an yabancı geliyorsa stres yok: ilerledikçe ve tekrar ederek uyguladıkça netleşece







