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:
- Bozuk erişim kontrolü (Broken Access Control)
- Kriptografik hatalar (Cryptographic Failures)
- Enjeksiyon (Injection); SQL enjeksiyonu ve XSS bu kategoride
- Güvensiz tasarım (Insecure Design)
- Güvenlik yanlış yapılandırması (Security Misconfiguration)
- Savunmasız ve güncel olmayan bileşenler
- Kimlik tanıma ve doğrulama hataları
- Yazılım ve veri bütünlüğü hataları
- Güvenlik günlüğü ve izleme hataları
- 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.
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
- Parolaları asla düz metin saklamayın; PHP'de
password_hash()vepassword_verify()kullanın. - Çerezlere
HttpOnly,SecureveSameSitebayraklarını ekleyin. - Giriş denemelerini sınırlayın (hız sınırlama, geçici kilitleme).
- Yönetici hesapları için iki aşamalı doğrulama kullanın (parola ve 2FA rehberi).
- Giriş sonrası oturum kimliğini yenileyin.
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:
Strict-Transport-Security: HTTPS'i zorunlu kılar.Content-Security-Policy: Hangi kaynaklardan betik ve içerik yüklenebileceğini sınırlar; XSS'i zorlaştırır.X-Content-Type-Options: nosniff: Tarayıcının dosya türünü tahmin etmesini engeller.Referrer-Policy: Başka sitelere sızan adres bilgisini sınırlar.X-Frame-Optionsveya CSPframe-ancestors: Sitenizin başka sitelere gömülerek tıklama gaspına (clickjacking) uğramasını önler.
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
- Girişleri, başarısız denemeleri ve yönetici işlemlerini günlüğe kaydedin; ancak parola ve kart numarası gibi hassas verileri günlüklere yazmayın.
- Olağandışı davranışlar için uyarı kurun (çok sayıda başarısız giriş, beklenmedik dosya değişikliği).
- Düzenli ve test edilmiş yedekler alın (3-2-1 yedekleme kuralı). Fidye yazılımı saldırısında tek gerçek kurtuluş yoludur.
Hızlı kontrol listesi
- Site tamamen HTTPS ve HSTS aktif mi?
- Tüm veritabanı sorguları hazırlanmış ifadelerle mi yazıldı?
- Kullanıcı çıktıları kaçırılıyor mu?
- Formlarda CSRF koruması var mı?
- Yönetim paneli güçlü parola ve 2FA ile korunuyor mu?
- Tüm yazılım ve eklentiler güncel mi?
- Yedekler çalışıyor ve geri yükleme test edildi mi?
- Güvenlik başlıkları ekli mi?
- 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.