Web uygulamalarına yönelik saldırıların büyük bölümü, sıfırıncı gün açıkları gibi sofistike yöntemlerle değil; yıllardır bilinen, belgelenmiş ve önlenebilir hata kalıplarıyla gerçekleşiyor. OWASP (Open Worldwide Application Security Project) tarafından yayımlanan Top 10 listesi, bu kalıpların en kritik olanlarını derleyen ve sektörde fiili standart kabul edilen bir referanstır. Bu yazıda listeyi madde madde ezberletmek yerine, geliştirici gözüyle en sık karşılaşılan riskleri ve her biri için somut savunma yöntemlerini ele alıyoruz.
Kırık Erişim Denetimi: Listenin Zirvesindeki Tehdit
Erişim denetimi hataları (broken access control), güncel OWASP listesinin ilk sırasında yer alıyor ve istatistiklere göre test edilen uygulamaların büyük bölümünde en az bir örneği bulunuyor. En yaygın biçimi IDOR'dur (Insecure Direct Object Reference): Kullanıcı, istekteki kimlik numarasını değiştirerek (/siparis/1453 yerine /siparis/1454) başkasının verisine erişir. Savunmanın altın kuralı şudur: Yetki kontrolü her istekte, sunucu tarafında ve nesne düzeyinde yapılmalıdır. Arayüzde butonu gizlemek bir güvenlik önlemi değildir. Laravel'de Policy sınıfları, Django'da permission katmanı gibi çatı mekanizmalarını sistematik kullanmak ve "yetkisiz kullanıcı erişememeli" senaryolarını otomatik testlere dahil etmek, bu açığın en etkili panzehiridir.
Enjeksiyon Saldırıları: Eski Ama Hâlâ Etkili
SQL enjeksiyonu çeyrek asırdır biliniyor ve hâlâ veri ihlallerinin önde gelen nedenlerinden biri. Sebep basit: Kullanıcı girdisinin sorgu metnine elle eklendiği tek bir satır bile yeterli. Modern ORM'ler (Eloquent, Hibernate, SQLAlchemy) parametre bağlamayı varsayılan yaptığı için koruma sağlar; risk, ham sorgulara ve dinamik sorgu kurgularına kaçılan istisnalarda doğar. Kural net olmalı: Kullanıcı girdisi asla sorgu metniyle birleştirilmez, her zaman bağlı parametre olarak geçirilir. Aynı ilke komut enjeksiyonu (shell), LDAP ve XML için de geçerlidir. Statik analiz araçları ve kod incelemede "string birleştirme ile sorgu" kalıbının otomatik işaretlenmesi, bu hatayı üretime ulaşmadan yakalar.
Kimlik Doğrulama ve Oturum Zafiyetleri
Zayıf parola politikaları, kaba kuvvet korumasının yokluğu ve hatalı oturum yönetimi, hesap ele geçirme saldırılarının kapısını açar. Asgari standartlar şunlardır:
- Parolaları bcrypt veya argon2 gibi modern, yavaş algoritmalarla saklayın; MD5 ve SHA-1 parolalar için kullanılamaz.
- Giriş uçlarına hız sınırlama ve kademeli gecikme uygulayın; bilinen sızıntı listelerindeki parolaları kabul etmeyin.
- Kritik işlemler ve yönetici hesapları için çok faktörlü kimlik doğrulamayı zorunlu tutun.
- Oturum çerezlerini
Secure,HttpOnlyveSameSitebayraklarıyla yapılandırın; giriş sonrası oturum kimliğini yenileyin.
XSS ve Güvenli Olmayan Tasarım
Siteler arası betik çalıştırma (XSS), kullanıcıdan gelen verinin sayfaya olduğu gibi basılmasıyla doğar ve oturum çalmadan kimlik avına kadar geniş bir saldırı yelpazesi açar. Modern şablon motorları (Blade, JSX, Twig) varsayılan olarak çıktıyı kaçışladığı için temel koruma hazırdır; tehlike, bu korumayı bilinçli olarak devre dışı bırakan ham çıktı yönergelerinde başlar. Zengin metin (HTML) kabul etmek zorundaysanız, beyaz liste tabanlı bir temizleyici (sanitizer) kullanın ve İçerik Güvenliği Politikası (CSP) başlığıyla ikinci bir savunma katmanı ekleyin. Güvenli olmayan tasarım kategorisi ise bize şunu hatırlatır: Güvenlik, kod yazıldıktan sonra eklenen bir katman değil, tasarım aşamasında düşünülmesi gereken bir gerekliliktir. Tehdit modellemesi için karmaşık metodolojiler şart değildir; her yeni özellikte "bu özellik nasıl kötüye kullanılabilir?" sorusunu sormak bile birçok tasarım hatasını erken yakalar.
Güvenlik Yapılandırması ve Eski Bileşenler
Hatalı güvenlik yapılandırması, en sık görülen sorunların başında gelir: Üretimde açık bırakılan hata ayıklama modu, varsayılan parolalar, gereksiz açık portlar, eksik güvenlik başlıkları ve herkese açık bulut depolama alanları. Bunların her biri tek başına küçük görünse de, saldırı zincirinin halkalarını oluşturur. Yapılandırmayı kodla yönetmek (IaC) ve ortamlar arası farkları otomatik denetlemek, bu kategorideki hataları sistematik biçimde azaltır. Savunmasız ve eski bileşenler de benzer bir ihmal hikâyesidir: Uygulamanız, kullandığı en savunmasız bağımlılık kadar güvenlidir. composer audit, npm audit ve Dependabot benzeri araçlarla bağımlılık taramasını CI sürecinin zorunlu adımı yapın; kullanılmayan paketleri projeden çıkarın.
Kriptografik Hatalar
OWASP'ın "kriptografik hatalar" kategorisi, hassas verilerin yetersiz korunmasını kapsar. En sık görülen örnekler; hassas verilerin düz metin saklanması, zayıf veya amaç dışı algoritma kullanımı ve şifreleme anahtarlarının kod deposunda tutulmasıdır. Pratik kurallar şöyle özetlenebilir: Aktarımda her yerde TLS kullanın ve eski protokol sürümlerini kapatın; saklamada hassas alanları güçlü ve güncel algoritmalarla şifreleyin; anahtarları koddan ve veritabanından ayrı, erişimi denetlenen bir kasada yönetin ve düzenli aralıklarla değiştirin. Kendi kripto algoritanızı yazmayın; bu alanda yaratıcılık değil, kanıtlanmış standartlara bağlılık güvenlik sağlar. Ayrıca hangi verinin gerçekten saklanması gerektiğini sorgulayın: Tutmadığınız veri, sızamaz.
Yazılım ve Veri Bütünlüğü
Tedarik zinciri saldırılarının artmasıyla listeye giren bütünlük kategorisi, kullandığınız paketlerin ve dağıtım sürecinizin doğrulanabilirliğini sorgular. Paket kilit dosyalarını (composer.lock, package-lock.json) sürüm kontrolünde tutun, CI/CD hattınıza imza doğrulaması ekleyin ve otomatik güncellemeleri gözden geçirme süzgecinden geçirin. Serileştirilmiş verinin güvensiz kaynaklardan alınıp doğrudan işlenmesi (insecure deserialization) de bu kategorinin parçasıdır; istemciden gelen serileştirilmiş nesnelere asla güvenmeyin.
Loglama, İzleme ve SSRF
Yetersiz loglama ve izleme, saldırıların aylarca fark edilmemesinin baş nedenidir. Başarısız girişler, yetki hataları ve kritik veri erişimleri yapılandırılmış biçimde loglanmalı; bu loglar merkezi bir sistemde toplanıp eşik aşımlarında uyarı üretmelidir. Loglara hassas veri (parola, token, kart numarası) yazılmaması da ayrı bir disiplindir. Sunucu taraflı istek sahteciliği (SSRF) ise bulut çağında önem kazanan bir risktir: Kullanıcının verdiği URL'yi sunucunuzun ziyaret etmesi gereken her özellik (web kancası, URL önizleme, içe aktarma), iç ağa ve bulut metadata servislerine açılan bir kapı olabilir. Hedef adresleri beyaz listeyle sınırlayın, iç IP aralıklarına çözümlenen istekleri engelleyin.
Güvenliği Sürece Gömmek
OWASP Top 10'u bir kontrol listesi olarak yılda bir kez gözden geçirmek yerine, maddelerini geliştirme sürecinin doğal parçası haline getirmek gerekir: Kod incelemelerinde güvenlik soruları, CI hattında statik analiz ve bağımlılık taraması, her sürümde otomatik güvenlik testleri ve yılda en az bir kez bağımsız sızma testi. Ekipteki her geliştiricinin bu riskleri tanıması, güvenlik ekibine devredilemeyecek ortak bir sorumluluktur; en ekonomik güvenlik açığı, hiç yazılmamış olandır. OPEIS Teknoloji olarak web uygulamaları için güvenlik denetimi, sızma testi ve güvenli yazılım geliştirme eğitimleri sunuyoruz. Uygulamanızın OWASP Top 10 karşısındaki durumunu öğrenmek için bizimle iletişime geçebilirsiniz.