OWASP Top 10: Web Güvenlik Açıkları
En yaygın on web güvenlik riskini ve her biri için geliştiricinin alması gereken somut önlemi, örnek kodlarla sade bir dille sıralıyoruz.

OWASP Top 10, kâr amacı gütmeyen OWASP topluluğunun yayımladığı, web uygulamalarındaki en kritik on güvenlik riskini sıralayan başvuru listesidir. Erişim kontrolü hataları, enjeksiyon (SQL injection gibi), kriptografik hatalar ve güvensiz yapılandırma bu riskler arasındadır. Liste, güvenli kodlama için bir eğitim ve denetim çerçevesi olarak kullanılır.
OWASP ve Top 10 Listesi Nedir?
OWASP (Open Worldwide Application Security Project), yazılım güvenliği üzerine ücretsiz kaynaklar, araçlar ve rehberler üreten açık bir topluluktur. En bilinen çalışması, birkaç yılda bir güncellenen Top 10 listesidir.
Liste bir standart ya da sertifika değildir; bir farkındalık belgesidir. Gerçek dünyadaki açık verileri ve uzman görüşleri birleştirilerek hazırlanır ve geliştiricilere “önce bunlara dikkat edin” der. Bu yazıda yaygın kabul gören 2021 sürümünün kategorilerini temel alıyoruz.
Liste zaman içinde değişir; yeni sürümlerde kategoriler yer değiştirir ya da birleşir. Güncel sürümü her zaman resmî kaynak olan owasp.org adresinden kontrol edin.
1–2. Erişim Kontrolü ve Şifreleme
Listenin ilk iki sırası, verinin kime gösterildiği ve nasıl korunduğuyla ilgilidir. İkisi de en sık rastlanan ve en ağır sonuç doğuran açıklar arasındadır; çünkü doğrudan müşteri verisine dokunurlar.
Bozuk erişim kontrolü
Erişim kontrolü hatası, kullanıcının yetkisi olmayan bir veriye ya da işleme ulaşabilmesidir. Klasik örnek: adres çubuğundaki siparis/1052 değerini 1053 yapan bir müşterinin başkasının siparişini görmesi.
Önlem basit ama disiplin ister: her istekte, sunucu tarafında, “bu kullanıcı bu kaydı görebilir mi?” sorusu yeniden sorulmalıdır. Varsayılan davranış reddetmek olmalı; erişim yalnızca açıkça izin verilen durumlarda açılmalıdır.
Kriptografik hatalar
Hassas verinin şifrelenmeden taşınması ya da saklanması bu başlığa girer. Parolaların düz metin ya da zayıf yöntemlerle saklanması, HTTPS kullanılmaması ve eski şifreleme algoritmaları en yaygın örneklerdir.
Parolalar için bcrypt ya da Argon2 gibi bu iş için tasarlanmış yavaş özetleme yöntemleri kullanılmalı, tüm trafik HTTPS üzerinden taşınmalı ve şifreleme anahtarları kodun içinde değil güvenli bir ortamda saklanmalıdır.
3. Enjeksiyon: SQL Injection ve XSS
Kullanıcıdan gelen verinin bir komutun parçası olarak çalıştırılması enjeksiyon açığıdır. En bilinen türleri SQL injection ve XSS'tir. 2021 listesinde XSS de bu kategori altında ele alınır.
SQL injection nedir?
SQL injection, form ya da adres alanına yazılan özel karakterlerle veritabanı sorgusunun değiştirilmesidir. Saldırgan veri çalabilir, silebilir ya da yetkisiz giriş yapabilir. Çözüm, sorguyu metin birleştirerek değil hazırlanmış sorgularla (prepared statement) kurmaktır.
// YANLIŞ: kullanıcı girdisi doğrudan sorguya ekleniyor
$sql = "SELECT * FROM uyeler WHERE eposta = '" . $_POST['eposta'] . "'";
// DOĞRU: hazırlanmış sorgu
$stmt = $pdo->prepare('SELECT * FROM uyeler WHERE eposta = ?');
$stmt->execute([$_POST['eposta']]);
$uye = $stmt->fetch();XSS nedir?
XSS (Cross-Site Scripting), sayfaya saldırganın yazdığı JavaScript'in yerleştirilmesidir. Bir yorum alanına girilen betik, o sayfayı açan herkesin tarayıcısında çalışabilir. Çıktıyı ekrana basarken bağlama uygun kaçış (escape) yapmak ve İçerik Güvenlik Politikası (CSP) başlığı eklemek temel önlemlerdir.
echo htmlspecialchars($yorum, ENT_QUOTES, 'UTF-8');4–5. Güvensiz Tasarım ve Yapılandırma
Bu iki kategori, kodun kendisinden çok kararlarla ilgilidir: sistemin nasıl kurgulandığı ve sunucunun nasıl ayarlandığı. İyi haber, ikisinin de büyük ölçüde süreç ve kontrol listeleriyle önlenebilmesidir.
Güvensiz tasarım
Bu kategori kod hatasından çok tasarım hatasını anlatır. Örneğin parola sıfırlamada yalnızca tahmin edilebilir bir güvenlik sorusuna güvenmek ya da bir kampanya kodunun sınırsız denenebilmesi. Kod kusursuz yazılsa bile tasarım açığı kapatılmaz.
Önlem, güvenliği geliştirmenin sonunda değil başında düşünmektir: tehdit modelleme, kötüye kullanım senaryoları ve deneme sayısı sınırlaması (rate limiting) tasarım aşamasında konuşulmalıdır.
Güvenlik yapılandırma hataları
Varsayılan parolaların değiştirilmemesi, hata mesajlarında sunucu ayrıntılarının gösterilmesi, gereksiz servislerin açık bırakılması ya da dizin listelemenin açık kalması bu başlığa girer. Çoğu zaman en kolay sömürülen açıklar bunlardır.
Önlem: sunucu ve uygulama için yazılı bir sıkılaştırma listesi hazırlamak, canlı ortamda hata ayrıntılarını kapatmak, güvenlik başlıklarını (HSTS, CSP, X-Content-Type-Options gibi) eklemek ve yapılandırmayı düzenli olarak denetlemek.
6–7. Bileşenler ve Kimlik Doğrulama
Altıncı ve yedinci sıradaki riskler, uygulamanın dışarıdan aldığı parçalar ile kullanıcının kim olduğunu doğrulama biçimi üzerinedir. Her ikisi de düzenli bakım gerektirir; bir kez kurup bırakmak yetmez.
Eski ve açıklı bileşenler
Modern bir uygulama onlarca, hatta yüzlerce dış kütüphane kullanır. Bunlardan birinde açık bulunduğunda, siz tek satır hata yapmasanız bile uygulamanız risk altına girer.
Önlem: kullanılan bileşenlerin listesini tutmak, güvenlik bildirimlerini takip etmek ve güncellemeleri düzenli yapmak. Paket yöneticilerinin denetim komutları bu işi kolaylaştırır. Kullanılmayan bağımlılığı kaldırmak da en ucuz güvenlik önlemlerinden biridir.
npm audit
composer auditKimlik doğrulama hataları
Zayıf parolalara izin vermek, sınırsız giriş denemesine açık olmak, oturum kimliklerini güvensiz saklamak ya da çıkış yapıldığında oturumu sonlandırmamak bu kategoriye girer.
Önlem: deneme sayısını sınırlamak, iki adımlı doğrulama sunmak, sızdırılmış parola listelerine karşı kontrol yapmak ve oturum çerezlerini HttpOnly, Secure ve SameSite özellikleriyle ayarlamak.
8–10. Bütünlük, Kayıt ve SSRF
Yazılım ve veri bütünlüğü
Güncellemelerin, eklentilerin ya da otomatik dağıtım hattının doğrulanmadan çalıştırılması saldırgana kapı açar. İmzalı paketler, güvenilir kaynaklar ve tedarik zinciri denetimi önlemin temelidir.
Kayıt tutma ve izleme eksikliği
Saldırı fark edilmezse hasar büyür. Başarısız girişler, yetki hataları ve kritik işlemler kaydedilmeli; olağandışı durumlarda uyarı üretilmelidir. Kayıtlara parola gibi hassas veri yazılmamalıdır.
SSRF
SSRF (Server-Side Request Forgery), sunucunun kullanıcıdan gelen bir adrese istek atmaya zorlanmasıdır. Saldırgan bu yolla iç ağdaki servislere ulaşabilir. Gidilebilecek adresler için izin listesi kullanmak temel önlemdir.
Güvenli Kodlama İçin Kontrol Listesi
Açıkların çoğu birkaç temel alışkanlıkla önlenebilir. Aşağıdaki listeyi kod incelemelerinde ve yayın öncesi kontrollerde kullanabilirsiniz. Test süreçlerinin güvenliğe nasıl bağlandığını yazılım testi nedir yazımızda ele aldık.
- Girdiye asla güvenmeyin: tüm girdileri sunucu tarafında doğrulayın.
- Hazırlanmış sorgu kullanın: SQL'i metin birleştirerek kurmayın.
- Çıktıyı kaçışlayın: HTML, URL ve JavaScript bağlamına göre.
- Yetkiyi her istekte kontrol edin: arayüzde gizlemek yetmez.
- Gizli bilgiyi koddan ayırın: anahtarlar ortam değişkenlerinde ya da kasada.
- Bağımlılıkları güncel tutun: düzenli denetim komutu çalıştırın.
- Kayıt tutun ve izleyin: şüpheli olayları fark edin.
Güvenli Dillerin ve Araçların Katkısı
Bazı açık türleri dil ve araç seçimiyle de azaltılabilir. Örneğin bellek güvenliği sağlayan diller, C ve C++'ta sık görülen bellek taşması açıklarını büyük ölçüde engeller; bu konuyu Rust nedir yazımızda anlattık. Tarayıcıda güvenli bir kum havuzunda çalışan WebAssembly da benzer bir yalıtım mantığına dayanır.
Yine de hiçbir dil, erişim kontrolü ya da tasarım hatasını kendiliğinden çözmez. Web uygulamalarında güvenliğin büyük kısmı, ekibin alışkanlıklarına ve süreçlerine bağlıdır.
Aurora Yazılım'da sektörel yazılım çözümleri, kurumsal web sitesi ve e-ticaret altyapısı projelerinde bu temel ilkeler geliştirme sürecinin parçası olarak uygulanır.
Sık Sorulan Sorular
01OWASP Top 10'a uymak yasal bir zorunluluk mu?
Doğrudan bir yasa değildir. Ancak pek çok güvenlik denetimi, ödeme altyapısı gereksinimi ve kurumsal sözleşme bu listeyi referans alır. Kişisel veri işleyen sistemlerde KVKK kapsamındaki güvenlik yükümlülükleri için güncel mevzuatı ve hukuk danışmanınızı kontrol edin.
02Sitemde açık olup olmadığını nasıl anlarım?
Otomatik tarama araçları bilinen yapılandırma hatalarını ve eski bileşenleri yakalayabilir. Erişim kontrolü ve tasarım hataları için ise uzman bir sızma testi ve kod incelemesi gerekir. Yalnızca yetkiniz olan sistemleri test edin.
03Küçük bir site de saldırıya uğrar mı?
Evet. Saldırıların büyük kısmı belirli bir hedef seçmeden, bilinen açıkları otomatik olarak tarayan botlarla yapılır. Bu yüzden küçük siteler de güncel bileşen ve doğru yapılandırmaya ihtiyaç duyar.
OWASP Top 10, web güvenliğinde nereden başlanacağını gösteren güvenilir bir haritadır; erişim kontrolü, enjeksiyon ve yapılandırma hataları çoğu açığın kaynağıdır. Güvenlik ilkeleriyle geliştirilmiş bir sistem için yazılım çözümlerimizi inceleyebilir, mevcut sitenizin hız ve sağlığını hız ve performans yönetimi hizmetimizle ele alabilir ya da bizimle iletişime geçebilirsiniz.


