Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
OWASP'ın Diğer Listeleri: API Security, LLM Top 10, ASVS ve Cheat Sheet Series
Top 10'un dışına çıkıyoruz: API Security Top 10 (2023) ile BOLA, BOPLA ve BFLA ayrımı, response DTO'suyla property seviyesinde veri ifşasını önlemek, Top 10 for LLM Applications (2025), ASVS 5.0 ve Cheat Sheet Series. Serinin yeni Top 10 sürümleriyle nasıl süreceğini ve sıradaki güvenlik serilerini konuşuyoruz.
OWASP Top 10: 2021'den 2025'e Ne Değişti ve Eski Dokümanları Güncellemek
SSRF'in A01'e katılması, bileşen sorununun Software Supply Chain Failures'a büyümesi, Security Misconfiguration'ın ikinciliğe çıkışı, yeni A10 Mishandling of Exceptional Conditions ve üç isim değişikliği. 2025 metodolojisini rakamlarıyla okuyor, eski ve yılsız kategori numaralarını bulup 2025 karşılığını öneren küçük bir .NET aracı yazıyoruz.
OWASP Top 10: 2017'den 2021'e, Semptomdan Kök Nedene
2017 listesinin 2021'de nasıl yeniden kurulduğunu inceliyoruz: Sensitive Data Exposure'dan Cryptographic Failures'a, Broken Access Control'ün bir numaraya çıkışı, XSS'in Injection'a katılması, Insecure Design ve SSRF'in gelişi. Küçük bir .NET örneğiyle SQL parametresi ile HTML encoding'in aynı kök nedene verilen cevap olduğunu gösteriyor, 2021 metodolojisini rakamlarıyla anlatıyoruz.
OWASP Top 10:2017: XXE, Insecure Deserialization ve Bugüne Kalan Dersler
OWASP Top 10:2017 listesini, yazıldığı dönemin web'ini ve 2013'ten 2017'ye değişenleri inceliyoruz. XXE'nin .NET 10'da varsayılan olarak nasıl reddedildiğini gerçek bir istekle, BinaryFormatter'ın neden artık derlenmediğini ve çalışmadığını kodla görüyor, XSS'in ayrı kategori olduğu yılları bugünkü listeyle karşılaştırıyoruz.
OWASP Top 10'u Birleştirmek: ASP.NET Core ve Angular için Güvenli Varsayılanlar
On kategoriyi tek bir Program.cs'te birleştiriyoruz: fallback policy, cookie bayrakları, ProblemDetails, 429 dönen rate limiting, security header'lar ve bilinmeyen JSON alanlarını reddetmek. Hepsini curl ile doğruluyor, .NET analyzer'larıyla SAST, WebApplicationFactory ile güvenlik regresyon testi yazıyor, DAST'ı ve ASVS 5.0'a geçişi konuşuyoruz.
OWASP A10: Mishandling of Exceptional Conditions — Fail Closed ve ProblemDetails
İzin dosyası okunamayınca herkesi admin yapan bir yetki kontrolü, istemciye SQL hatasını ve dosya yolunu gönderen bir yorum endpoint'i ve istemci gittikten sonra da çalışmaya devam eden bir aramayla başlıyoruz. Fail closed, hatayı yerinde yakalamak, IExceptionHandler ve ProblemDetails, .NET 10'un handler loglama değişikliği, request timeout ve iptal ile düzeltiyoruz.
OWASP A09: Security Logging and Alerting Failures — Neyi Loglamalı, Neyi Asla
Yanlış parolayı loga yazan, satır sonuyla sahte kayıt üretilebilen ve 403'leri hiç kaydetmeyen bir giriş endpoint'iyle başlıyoruz. LoggerMessage ve JSON console ile structured logging'e geçiyor, yetkilendirme reddini görünür kılıyor, e-postayı HMAC redaction ile koruyor, traceId ile cevabı loga bağlıyor ve hangi olaylara alarm kurulacağına bakıyoruz.
OWASP A08: Software or Data Integrity Failures — Deserialization ve Mass Assignment
Gelen verinin kendi tipini seçmesinin neden tehlikeli olduğunu kavramsal olarak anlatıyor, BinaryFormatter'ın net10.0'da derleme hatası ve PlatformNotSupportedException ile nasıl sona erdiğini gerçek çıktılarla gösteriyoruz. System.Text.Json'da allowlist ile polimorfizm kuruyor, DTO ve JsonUnmappedMemberHandling ile mass assignment'ı kapatıyor, CI/CD ve SRI ile kodun bütünlüğüne bakıyoruz.
OWASP A07: Authentication Failures (2) — Cookie Bayrakları, JWT Doğrulama ve CSRF
Girişten sonra kimliğin her istekte nasıl taşındığına bakıyoruz. Cookie bayraklarını ve __Host- önekini açıkça ayarlıyor, session fixation riskini anlatıyor, JwtBearer'da issuer, audience, süre, imza ve algoritmayı doğruluyor, süresi dolan token'da ClockSkew'un etkisini saniye saniye ölçüyor ve antiforgery ile SameSite'ın CSRF'e karşı birlikte nasıl çalıştığını gösteriyoruz.
OWASP A07: Authentication Failures (1) — Brute Force, Lockout ve NIST Parola Kuralları
Sınırsız deneme kabul eden, kullanıcının var olup olmadığını mesajıyla ve cevap süresiyle ele veren bir giriş endpoint'iyle başlıyoruz. Brute force ile credential stuffing'i ayırıyor, Identity'nin varsayılan parola kurallarını NIST SP 800-63B-4 ile karşılaştırıyor, blocklist validator, lockout ve tek tip cevapla düzeltiyor, MFA ve passkey'lere kısaca bakıyoruz.
OWASP A06: Insecure Design — İş Mantığı Açıkları, Race Condition ve Rate Limiting
Satır satır doğru çalışan bir sipariş endpoint'i negatif adetle para iade ediyor, tek kullanımlık kuponu iki kez kabul ediyor ve son kopyayı iki kişiye satıyor. Tasarım hatasını uygulama hatasından ayırıyor, STRIDE ve abuse case ile eksik gereksinimleri buluyor, koşullu UPDATE, transaction, .NET 10 doğrulaması ve rate limiting ile düzeltiyoruz.
OWASP A05: Injection (2) — XSS, Razor Encoding, innerHTML, CSP ve Trusted Types
Reflected, stored ve DOM-based XSS'i Bookstore lab'ında inceliyoruz: HtmlEncoder ve Razor'ın otomatik encoding'i, JSON API'den gelen değeri innerHTML ile yazmanın tuzağı ve textContent ile düzeltmesi, Angular'ın sanitization'ı ve bypassSecurityTrust* riski, ardından ikinci savunma hattı olarak CSP ile Trusted Types'ın headless Chrome'da güvensiz kodu nasıl durdurduğu.