Bir web sitesi saldırganlar için genellikle "özel" bir hedef değildir; çoğu saldırı otomatiktir ve internette bilinen açıkları sürekli tarar. Bu yüzden küçük bir sitenin de hedef olmaması gibi bir lüksü yoktur. İyi haber: büyük kısmı basit ve bilinen önlemlerle engellenebilir. Bu yazıda OWASP Top 10 adlı, web uygulaması güvenlik risklerinin uluslararası kabul görmüş listesini temel alarak uygulanabilir adımları anlatıyoruz.

OWASP Top 10 (2021) nedir?

OWASP (Open Worldwide Application Security Project), kâr amacı gütmeyen bir güvenlik topluluğudur. Top 10 listesi, web uygulamalarında en kritik güvenlik risklerini özetler. 2021 sürümündeki başlıklar şunlardır:

  1. Bozuk erişim kontrolü (Broken Access Control)
  2. Kriptografik hatalar (Cryptographic Failures)
  3. Enjeksiyon (Injection); SQL enjeksiyonu ve XSS bu kategoride
  4. Güvensiz tasarım (Insecure Design)
  5. Güvenlik yanlış yapılandırması (Security Misconfiguration)
  6. Savunmasız ve güncel olmayan bileşenler
  7. Kimlik tanıma ve doğrulama hataları
  8. Yazılım ve veri bütünlüğü hataları
  9. Güvenlik günlüğü ve izleme hataları
  10. Sunucu taraflı istek sahteciliği (SSRF)

Liste periyodik olarak güncellenir; güncel sürümü OWASP sitesinden kontrol edin.

1. Erişim kontrolü

Bir kullanıcının yalnızca yetkili olduğu kaynaklara erişebilmesi gerekir. Sık görülen hata: adres çubuğundaki bir sayıyı değiştirerek (/siparis?id=1042 → 1043) başkasının verisine ulaşabilmek. Önlem: yetki kontrolünü her istekte sunucu tarafında yapın, gizli menüler veya gizlenmiş bağlantılar güvenlik değildir; varsayılan olarak her şeyi reddedin, yalnızca izin verileni açın; yönetim paneline erişimi sınırlayın.

Sponsorlu Bağlantı

2. Enjeksiyon: SQL ve XSS

SQL enjeksiyonu, kullanıcı girdisinin doğrudan SQL sorgusuna eklenmesiyle oluşur. Çözüm: hazırlanmış ifadeler (prepared statements). PHP'de PDO ile:

// Güvensiz: $db->query("SELECT * FROM users WHERE email = '$email'");
$stmt = $db->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);

XSS (Cross-Site Scripting) ise kullanıcı girdisinin sayfada kaçışsız gösterilmesiyle başkasının tarayıcısında kod çalıştırılmasıdır. Çözüm: çıktıyı bağlama uygun biçimde kaçırmak (HTML için htmlspecialchars($metin, ENT_QUOTES, 'UTF-8')) ve bir İçerik Güvenlik Politikası (CSP) eklemek.

3. CSRF

CSRF (Cross-Site Request Forgery), giriş yapmış kullanıcının tarayıcısının, kullanıcının bilgisi dışında bir sitenize istek göndermesini sağlamaktır. Önlemler: durum değiştiren formlarda CSRF belirteci, çerezlerde SameSite=Lax (veya Strict), hassas işlemlerde yeniden doğrulama ve Origin başlığı kontrolü.

4. Kimlik doğrulama ve oturumlar

5. Şifreleme ve HTTPS

Tüm trafiği HTTPS ile sunun (HTTPS rehberi), hassas verileri depolarken güçlü ve güncel algoritmalar kullanın, anahtarları ve parolaları kaynak kod deposuna koymayın; yapılandırma dosyalarını web kökü dışında tutun.

6. Yapılandırma ve güvenlik başlıkları

Varsayılan şifreleri değiştirin, kullanılmayan servisleri ve örnek dosyaları kaldırın, hata ayrıntılarını ziyaretçiye göstermeyin (display_errors kapalı, hatalar günlüğe yazılsın). Sunucu yanıtlarına şu başlıkları eklemeyi değerlendirin:

7. Güncel ve güvenilir bileşenler

Çoğu başarılı saldırı, eski bir WordPress eklentisi veya kütüphanedeki bilinen bir açıktan gelir. Çekirdek yazılımı, temaları, eklentileri ve kütüphaneleri düzenli güncelleyin; kullanmadıklarınızı silin; yalnızca güvenilir kaynaklardan yazılım indirin. Bağımlılık tarama araçları (örneğin composer audit, npm audit) bilinen açıkları gösterir.

8. Dosya yükleme

Kullanıcıların dosya yüklemesine izin veriyorsanız: uzantıyı ve içerik türünü doğrulayın, yüklenen dosyaları web kökünün dışında veya betik çalıştırılamayan bir dizinde saklayın, dosya adını sunucuda yeniden üretin, boyut sınırı koyun.

9. Kullanıcı girdisiyle yapılan dış istekler (SSRF)

Uygulamanız kullanıcının verdiği bir URL'ye sunucudan istek atıyorsa (önizleme, web kancası, analiz aracı), saldırgan bunu iç ağa veya bulut metadata servislerine yönlendirebilir. Hedef adresi doğrulayın: yalnızca http/https, özel ve yerel IP adreslerini reddedin, yönlendirmeleri sınırlayın.

10. Günlük kayıt, izleme ve yedekleme

Hızlı kontrol listesi

  1. Site tamamen HTTPS ve HSTS aktif mi?
  2. Tüm veritabanı sorguları hazırlanmış ifadelerle mi yazıldı?
  3. Kullanıcı çıktıları kaçırılıyor mu?
  4. Formlarda CSRF koruması var mı?
  5. Yönetim paneli güçlü parola ve 2FA ile korunuyor mu?
  6. Tüm yazılım ve eklentiler güncel mi?
  7. Yedekler çalışıyor ve geri yükleme test edildi mi?
  8. Güvenlik başlıkları ekli mi?
  9. Hata ayrıntıları kullanıcıya gösterilmiyor mu?

Kaynaklar ve ileri okuma

Sık Sorulan Sorular

Küçük sitem neden hedef olsun?

Saldırıların çoğu otomatik botlarla yapılır ve site büyüklüğüne bakmaz; ele geçirilen siteler spam göndermek, zararlı yazılım yaymak veya başka saldırılara basamak olmak için kullanılır.

Güvenlik eklentisi yeterli mi?

Eklentiler faydalıdır ama güncel yazılım, güçlü parola, 2FA, yedekleme ve doğru yapılandırmanın yerini tutmaz. Güvenlik katmanlar halinde düşünülmelidir.

Sitem hacklendiyse ilk ne yapmalıyım?

Siteyi geçici olarak devre dışı bırakın, tüm parolaları (hosting, veritabanı, yönetim, e-posta) değiştirin, temiz bir yedekten geri dönün veya zararlı dosyaları temizleyin, açığın nasıl oluştuğunu bulun ve yazılımları güncelleyin. Kişisel veri sızıntısı olduysa KVKK kapsamındaki bildirim yükümlülüklerini bir uzmandan değerlendirin.