Siber Güvenlik

Web Uygulama Güvenliği: OWASP Top 10 ve Korunma Yolları

Fatih Algül
13.03.2026 436 görüntülenme

Web Uygulama Güvenliği Neden Önemli?

Günümüzde web uygulamaları, işletmelerin ve bireylerin dijital dünyada en çok etkileşimde bulunduğu yapılar haline geldi. Ancak bu yaygınlık, siber saldırganlar için geniş bir saldırı yüzeyi oluşturuyor. OWASP (Open Web Application Security Project), web uygulama güvenliğini artırmak amacıyla düzenli olarak en kritik 10 güvenlik açığını yayınlar. Bu rehberde, OWASP Top 10 listesindeki her bir zafiyeti detaylıca inceleyecek, gerçek dünya örnekleriyle açıklayacak ve korunma yollarını ele alacağız.

1. Broken Access Control (Kırık Erişim Kontrolü)

Erişim kontrolü, kullanıcıların yalnızca yetkili oldukları kaynaklara ulaşabilmesini sağlar. Bu kontrollerin eksik veya hatalı uygulanması, yetkisiz veri erişimine yol açar. Örneğin, bir kullanıcı URL'deki ID parametresini değiştirerek başka bir kullanıcının verilerine ulaşabilir.

Kötü örnek:

GET /api/users/1542/profile

Kullanıcı bu URL'deki 1542 değerini 1543 yaparak başka birinin profiline erişebilir.

Korunma yolları:

  • Her istekte sunucu tarafında yetkilendirme kontrolü yapın
  • Varsayılan olarak erişimi reddedin (deny by default)
  • JWT veya session tabanlı kimlik doğrulamayı her endpoint'te zorunlu tutun
  • IDOR (Insecure Direct Object Reference) açıklarını önlemek için UUID gibi tahmin edilmesi zor tanımlayıcılar kullanın

2. Cryptographic Failures (Kriptografik Hatalar)

Hassas verilerin şifrelenmemesi veya zayıf algoritmalarla şifrelenmesi bu kategoriye girer. Parolaların düz metin saklanması, eski TLS sürümlerinin kullanılması ve MD5/SHA1 gibi zayıf hash algoritmalarının tercih edilmesi yaygın hatalardandır.

Doğru parola saklama örneği (Node.js):

const bcrypt = require('bcrypt');
const saltRounds = 12;
const hashedPassword = await bcrypt.hash(plainPassword, saltRounds);

Korunma yolları:

  • Parolalar için bcrypt, scrypt veya Argon2 kullanın
  • TLS 1.2 veya üzeri sürümleri zorunlu tutun
  • Hassas verileri veritabanında AES-256 gibi güçlü algoritmalarla şifreleyin
  • Şifreleme anahtarlarını güvenli bir şekilde yönetin (HSM, Vault vb.)

3. Injection (Enjeksiyon Saldırıları)

SQL Injection, NoSQL Injection, OS Command Injection ve LDAP Injection gibi saldırılar bu kategoride yer alır. Kullanıcıdan gelen girdi doğrudan sorguya veya komuta eklendiğinde ortaya çıkar.

Güvensiz SQL sorgusu:

const query = "SELECT * FROM users WHERE username = '" + userInput + "'";
// userInput = "' OR '1'='1" olursa tüm kullanıcı verileri sızar!

Güvenli versiyon (Parametrik sorgu):

const query = "SELECT * FROM users WHERE username = $1";
const result = await pool.query(query, [userInput]);

Korunma yolları:

  • Parametrik sorgular (prepared statements) kullanın — bu en etkili yöntemdir
  • ORM kütüphaneleri tercih edin (Sequelize, Prisma, SQLAlchemy vb.)
  • Girdi doğrulama (input validation) uygulayın
  • En az yetki prensibini (least privilege) veritabanı kullanıcılarına uygulayın

4. Insecure Design (Güvensiz Tasarım)

Bu kategori, uygulamanın tasarım aşamasında güvenliğin düşünülmemesinden kaynaklanan sorunları kapsar. Kod düzeyindeki hatalardan farklı olarak, mimari düzeyde güvenlik eksiklikleridir.

Korunma yolları:

  • Geliştirme sürecine threat modeling (tehdit modelleme) ekleyin
  • Güvenli tasarım kalıplarını (secure design patterns) benimseyin
  • Her özellik için abuse case'leri (kötüye kullanım senaryoları) tanımlayın
  • Rate limiting ve iş mantığı doğrulamalarını tasarım aşamasında planlayın

5. Security Misconfiguration (Güvenlik Yapılandırma Hataları)

Varsayılan ayarların değiştirilmemesi, gereksiz servislerin açık bırakılması, hata mesajlarında hassas bilgi sızması ve eksik HTTP güvenlik başlıkları bu kategoriye girer.

Önerilen HTTP güvenlik başlıkları:

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-XSS-Protection: 0
Referrer-Policy: strict-origin-when-cross-origin

Korunma yolları:

  • Üretim ortamında debug modunu kapatın
  • Varsayılan parolaları ve kullanıcı adlarını mutlaka değiştirin
  • Gereksiz portları, servisleri ve endpoint'leri kapatın
  • Otomatik güvenlik tarama araçları (SAST/DAST) kullanın

6. Vulnerable and Outdated Components (Güvenlik Açığı Bulunan Bileşenler)

Kullandığınız kütüphane, framework veya sistem bileşenlerindeki bilinen güvenlik açıkları, uygulamanızı doğrudan etkiler. Log4Shell (CVE-2021-44228) bunun en bilinen örneklerinden biridir.

Korunma yolları:

  • npm audit, pip audit veya snyk gibi araçlarla bağımlılıkları düzenli tarayın
  • Dependabot veya Renovate gibi otomatik güncelleme araçları kullanın
  • Kullanılmayan bağımlılıkları kaldırın
  • SBOM (Software Bill of Materials) oluşturun ve takip edin

7. Identification and Authentication Failures (Kimlik Doğrulama Hataları)

Zayıf parola politikaları, brute-force saldırılarına karşı korumasızlık, oturum yönetimi hataları ve çok faktörlü kimlik doğrulama eksikliği bu kategoride değerlendirilir.

Korunma yolları:

  • Çok faktörlü kimlik doğrulama (MFA) uygulayın
  • Başarısız giriş denemelerinde rate limiting ve hesap kilitleme mekanizması ekleyin
  • Oturum token'larını güvenli şekilde oluşturun ve yönetin (HttpOnly, Secure, SameSite cookie bayrakları)
  • Parola karmaşıklık kuralları ve sızdırılmış parola kontrolü (Have I Been Pwned API) uygulayın

8. Software and Data Integrity Failures (Yazılım ve Veri Bütünlüğü Hataları)

CI/CD pipeline'larının güvensiz yapılandırılması, doğrulanmamış güncellemeler ve güvenilmeyen kaynaklardan gelen verilerin deserializasyonu bu kategorinin kapsamındadır.

Korunma yolları:

  • Bağımlılıkların bütünlüğünü hash doğrulamasıyla kontrol edin
  • CI/CD pipeline'larında erişim kontrolü ve denetim kayıtları uygulayın
  • Kod imzalama (code signing) kullanın
  • Güvenilmeyen veriler için asla doğrudan deserializasyon yapmayın

9. Security Logging and Monitoring Failures (Güvenlik Kayıt ve İzleme Eksiklikleri)

Yeterli loglama ve izleme olmadan saldırıları tespit etmek ve yanıt vermek neredeyse imkansızdır. Birçok ihlal, aylarca fark edilmeden devam eder.

Loglanması gereken olaylar:

  • Başarılı ve başarısız giriş denemeleri
  • Yetkilendirme hataları
  • Girdi doğrulama başarısızlıkları
  • Uygulama hataları ve istisnalar
  • Yönetici işlemleri ve yapılandırma değişiklikleri

Korunma yolları:

  • Merkezi bir log yönetim sistemi kurun (ELK Stack, Grafana Loki vb.)
  • Anormallik tespiti için alerting mekanizmaları oluşturun
  • Log'larda hassas veri (parola, kredi kartı numarası) bulunmadığından emin olun
  • Olay müdahale planı (incident response plan) hazırlayın ve düzenli olarak test edin

10. Server-Side Request Forgery - SSRF (Sunucu Taraflı İstek Sahteciliği)

SSRF, saldırganın sunucuyu manipüle ederek iç ağdaki kaynaklara istek göndermesini sağlayan bir saldırı türüdür. Özellikle bulut ortamlarında metadata endpoint'lerine erişim yoluyla ciddi sonuçlara yol açabilir.

Tehlikeli senaryo:

// Kullanıcıdan gelen URL'ye sunucu tarafında istek atılıyor
const response = await fetch(userProvidedUrl);
// userProvidedUrl = "http://169.254.169.254/latest/meta-data/" ise
// AWS metadata bilgileri sızdırılabilir!

Korunma yolları:

  • Kullanıcıdan gelen URL'leri bir allowlist ile doğrulayın
  • İç ağ adreslerine (10.x.x.x, 172.16.x.x, 192.168.x.x, 169.254.x.x) istek yapılmasını engelleyin
  • DNS çözümleme sonuçlarını doğrulayın (DNS rebinding koruması)
  • Ağ segmentasyonu uygulayarak sunucunun erişebileceği kaynakları sınırlayın

Genel Güvenlik Kontrol Listesi

OWASP Top 10'un ötesinde, web uygulamalarınızı korumak için uygulamanız gereken temel güvenlik önlemlerini bir kontrol listesi halinde derledik:

  1. Güvenli geliştirme yaşam döngüsü (SDLC) benimseyin
  2. Her sprint'te güvenlik code review yapın
  3. SAST (Static Application Security Testing) ve DAST (Dynamic Application Security Testing) araçlarını CI/CD pipeline'ınıza entegre edin
  4. Düzenli penetrasyon testleri yaptırın
  5. Bug bounty programı başlatmayı değerlendirin
  6. Geliştirici ekibinize düzenli güvenlik eğitimleri verin
  7. Principle of least privilege ilkesini her katmanda uygulayın
  8. Defense in depth yaklaşımıyla çok katmanlı güvenlik oluşturun

Sonuç

Web uygulama güvenliği, bir kerelik bir görev değil sürekli devam eden bir süreçtir. OWASP Top 10, güvenlik yolculuğunuzda size bir başlangıç noktası sunar. Ancak gerçek güvenlik, bu listedeki maddelerin ötesinde, güvenlik kültürünü organizasyonunuzun her seviyesine yerleştirmekle mümkündür. Kod yazmaya başlamadan önce güvenliği düşünün, geliştirme sürecinde sürekli test edin ve üretim ortamında izlemeyi asla bırakmayın. Unutmayın: güvenlik bir ürün değil, bir süreçtir.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç