Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Tarayıcının Güvenlik Modeli: Same-Origin Policy, Origin ile Site Farkı, SameSite Cookie'ler ve Fetch Metadata
Same-Origin Policy cross-origin isteği engellemez, yalnız yanıtın okunmasını engeller; isteğin yanında hangi cookie'nin gideceğine SameSite karar verir, sunucu da Sec-Fetch-* header'larına bakarak isteği reddedebilir. Bu yazıda origin ile site farkını, CORS'un SOP'yi neden gevşettiğini, Strict/Lax/None cookie'lerin ve Fetch Metadata header'larının headless Chrome'da gerçek davranışını ASP.NET Core 10 lab'ında logluyor ve bir Fetch Metadata policy'sini testleriyle kuruyoruz.
Angular'da DOM XSS Sink Envanteri: ElementRef, Renderer2, Dinamik URL'ler, HTML Üreten Kütüphaneler ve Code Review Listesi
Angular yalnız kendi template binding'lerini sanitize eder; ElementRef.nativeElement, Renderer2.setProperty/setAttribute, insertAdjacentHTML, dinamik script ve iframe src'leri ile HTML üreten library'ler korumasızdır. Bu yazıda bu sink'leri headless Chrome'da gösteriyor, template ve DomSanitizer ile düzeltiyor, marked, DOMPurify ve setHTML'i karşılaştırıyor ve grep ile ESLint tabanlı bir code review kontrol listesi kuruyoruz.
Angular'a Strict CSP Uygulamak: Nonce, strict-dynamic, autoCsp ve Report-Only ile Kademeli Geçiş
Host listesine dayalı CSP çoğu zaman aşılabilir; Angular için doğru yol nonce ya da hash ile 'strict-dynamic' kullanan strict bir policy. Bu yazıda statik hosting için autoCsp'nin ürettiği hash'li policy'yi, ASP.NET Core'dan istek başına nonce ve ngCspNonce ile servisi, base-uri 'none' tuzağını, üçüncü parti script'lerle uzlaşmayı ve Report-Only ile kırmadan enforce'a geçişi headless Chrome çıktılarıyla gösteriyoruz.
Trusted Types'ı Production'a Almak: Angular Policy'leri, Üçüncü Parti Kütüphaneler ve Baseline 2026
Trusted Types, DOM sink'lerine düz string yerine yalnız izinli bir policy'nin ürettiği typed object kabul ettirir; DomSanitizer.sanitize sonucunu innerHTML'e yazmak bile ihlaldir. Bu yazıda Angular'ın policy adlarını node_modules'tan doğruluyor, Report-Only ile envanter çıkarıyor, DOMPurify, loader ve üçüncü parti script ihlallerini çözüyor, default policy'nin tehlikesini gösteriyor ve Firefox 148 ile Baseline 2026 olan desteği özetliyoruz.
Token Nerede Saklanmalı? localStorage, Memory, Cookie, Service Worker ve BFF'in Tehdit Modeli
Tarayıcıda hiçbir saklama yeri XSS'in kullanıcı adına istek atmasını engelleyemez; fark, token'ın okunup dışarı taşınabilmesinde ve bu yüzden RFC 10017 token'ı tarayıcıya hiç vermeyen BFF'i öneriyor. Bu yazıda localStorage, memory ve HttpOnly cookie modellerini Angular 22 ve ASP.NET Core 10 lab'ında simüle edilmiş bir XSS ile deniyor, Web/Service Worker ve refresh token risklerini tartıyor ve Bookstore'un BFF kararını testlerle sabitliyoruz.
Üçüncü Parti Script'ler, iframe'ler ve postMessage: sandbox, frame-ancestors, Permissions-Policy ve Güvenli Mesajlaşma
Sayfana script etiketiyle eklenen üçüncü parti kod senin origin'inde ve senin yetkinle çalışır; onu kendi origin'indeki sandbox'lı bir iframe'e taşı, sayfanı frame-ancestors header'ıyla çerçevelenmeye kapat, kullanmadığın API'leri Permissions-Policy ile kapat ve postMessage'da origin, kaynak pencere ve şemayı doğrula. Hepsini yerel üç origin'li bir lab'da headless Chrome ve Vitest ile gerçek çıktılarla gösteriyoruz.
Angular SSR Güvenliği: allowedHosts, Host Header Doğrulama, TransferState ve Bundle'a Sızan Secret'lar
Angular SSR'da sunucu, göreli HttpClient URL'lerini gelen isteğin Host header'ına göre çözer; bu yüzden allowedHosts'u açık adlarla doldur, proxy header'larına yalnız güvenilir bir proxy arkasında güven ve API adresini Host'tan türetme. Yerel bir SSR sunucusunda SSRF'yi, 2026 advisory'lerini, TransferState'e sızan alanları, SSR'da nonce'lu CSP'yi ve bundle ile source map'e giren secret'ları gerçek çıktılarla gösteriyoruz.
npm Supply Chain'i Sertleştirmek: Lifecycle Script'leri, Release Cooldown, Provenance ve Trusted Publishing
npm supply chain'i sertleştirmenin üç ayağı var: kurulum script'lerini onay listesiyle sınırlamak, yeni sürümleri birkaç gün bekletmek ve publish token'larını trusted publishing ile ortadan kaldırmak. Bu yazıda npm 11 ve 12'nin allowScripts policy'sini, pnpm'in allowBuilds ve minimumReleaseAge ayarlarını, npm min-release-age'i, npm audit signatures çıktısını ve OIDC tabanlı trusted publishing'i yerel bir registry'de gerçek kurulumlarla deniyoruz.
Angular 11'den 22'ye ve Tarayıcılarda Frontend Güvenliğinde Değişenler
Angular 11'den 22'ye güvenlik özelliklerinin çoğu yeni major'larla değil patch'lerle geldi; eski bir projeyi denetlerken major'a değil tam sürüme bakmak gerekiyor. Bu yazıda Trusted Types'tan autoCsp'ye ve SSR allowedHosts'a kadar her özelliğin geldiği sürümü paket tarball'larından doğruluyor, 22.0.8'de XSRF header'ının gönderilmediğini headless Chrome'da gösteriyor, tarayıcılardaki değişiklikleri topluyor ve çalıştırılabilir bir denetim script'i çıkarıyoruz.