Web Uygulamalarında Temel Güvenlik Önlemleri: OWASP Rehberi
OWASP Top 10 üzerinden web uygulama güvenliğinin temellerini, en yaygın açıkları ve bunlara karşı alınabilecek pratik önlemleri ele alıyoruz.
Bir web uygulaması geliştirirken aklımıza ilk gelen şey genellikle özellikler, performans ya da kullanıcı deneyimi oluyor. Güvenlik ise çoğu zaman "sonra bakarız" listesinin sonuna atılıyor. Ama gerçek şu: güvenlik sonradan eklenen bir katman değil, başından itibaren mimariye işlenmesi gereken bir düşünce biçimidir.
Bu yazıda, güvenli web uygulamaları geliştirmenin fiili standartlarından biri olan OWASP (Open Web Application Security Project) çerçevesini ve en kritik güvenlik önlemlerini sade bir dille ele alacağım.
OWASP Nedir?
OWASP, web uygulama güvenliği konusunda açık kaynaklı materyaller üreten, kâr amacı gütmeyen bir topluluktur. Yayımladığı OWASP Top 10 listesi, her birkaç yılda bir güncellenerek web uygulamalarındaki en yaygın ve kritik güvenlik açıklarını sıralamaktadır. Bu liste, hem geliştiriciler hem de güvenlik ekipleri için fiili bir referans noktasına dönüşmüştür.
En Kritik Güvenlik Açıkları
1. Injection (Enjeksiyon Saldırıları)
SQL Injection, en eski ama hâlâ en tehlikeli saldırı türlerinden biridir. Kullanıcıdan gelen verinin doğrudan sorguya eklenmesi, saldırganın veritabanını manipüle etmesine kapı açar.
Ne yapmalı?
- Parametreli sorgular ve ORM kullanın
- Kullanıcı girdilerini her zaman doğrulayın ve sanitize edin
- Veritabanı kullanıcısına yalnızca ihtiyaç duyduğu izinleri verin
2. Broken Authentication (Kimlik Doğrulama Zafiyetleri)
Zayıf parola politikaları, oturum token'larının yanlış yönetimi ya da brute-force korumasının olmaması bu kategoriye girer.
Ne yapmalı?
- Çok faktörlü kimlik doğrulama (MFA) uygulayın
- Oturum sürelerini makul tutun ve logout işlemini sunucu tarafında sonlandırın
- Parola hash işlemi için
bcryptveyaargon2kullanın
3. Cross-Site Scripting (XSS)
Saldırganın zararlı JavaScript kodunu sayfaya enjekte ederek diğer kullanıcıların tarayıcısında çalıştırmasıdır. Çerez hırsızlığı ve oturum ele geçirme bu yolla gerçekleşir.
Ne yapmalı?
- Kullanıcı girdilerini HTML'e yazarken mutlaka encode edin
- Content Security Policy (CSP) başlığı ekleyin
- Modern framework'lerin otomatik XSS korumasını devre dışı bırakmayın
4. Insecure Direct Object Reference (IDOR)
Bir kullanıcının /invoice/1042 yerine /invoice/1043 yazarak başkasının faturasına erişebilmesi, nesne düzeyinde yetkilendirme eksikliğinden kaynaklanır.
Ne yapmalı?
- Her istek için yetkilendirme kontrolü yapın
- Tahmin edilemez ID formatları (UUID gibi) kullanın
5. Security Misconfiguration (Güvensiz Yapılandırma)
Varsayılan kimlik bilgilerinin değiştirilmemesi, hata mesajlarının ayrıntılı gösterilmesi, gereksiz servislerin açık bırakılması bu başlık altında değerlendirilen sorunlardır.
Ne yapmalı?
- Production ortamında hata ayrıntılarını gizleyin
- HTTP güvenlik başlıklarını aktif edin:
Strict-Transport-Security,X-Frame-Options,X-Content-Type-Options - Gereksiz endpoint ve servisleri kapatın
Genel Güvenlik Alışkanlıkları
Belirli bir açığın ötesinde, güvenli bir geliştirme kültürü oluşturmak için şunlara dikkat etmek gerekir:
- Bağımlılıkları güncel tutun: Kullandığınız kütüphanelerdeki bilinen açıklar için
npm audit,OWASP Dependency-Checkgibi araçları düzenli çalıştırın. - HTTPS zorunlu kılın: Tüm trafiği TLS üzerinden şifreleyin; mixed content uyarılarını görmezden gelmeyin.
- Loglama ve izleme: Anormal istekleri, başarısız giriş denemelerini ve beklenmedik hataları kayıt altına alın. Bir saldırıyı fark etmenin yolu, önce onu görünür kılmaktır.
- En az ayrıcalık ilkesi: Hem kullanıcılar hem de servis hesapları yalnızca ihtiyaç duydukları izinlere sahip olmalıdır.
Son Söz
Güvenlik bir hedef değil, sürekli devam eden bir süreçtir. OWASP Top 10, güvenli yazılım geliştirmeye başlamak için harika bir çerçeve sunuyor; ancak burada bitmediğini unutmamak gerekiyor. Kod inceleme süreçlerine güvenlik perspektifini dahil etmek, düzenli penetrasyon testleri yaptırmak ve ekibi bilinçlendirmek, sizi birkaç adım öne taşıyacaktır.
Uygulamalarınızı güvende tutun. Bir açık keşfetmek, bir saldırganın keşfetmesinden her zaman daha iyidir.