Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Yurt Dışına Aktarım ve Veri İhlali Hazırlığı: Cloud Region, LLM Sağlayıcıları, Standart Sözleşme ve 72 Saatlik Bildirim
Yurt dışına aktarım yalnız sunucunun yeri değildir; log, backup, e-posta, analytics ve LLM prompt'ları da aktarımdır ve 2024'ten beri yeterlilik kararı, standart sözleşme gibi uygun güvenceler ya da arızi hâllerden birine dayanmalıdır. Bookstore'da alt işleyen envanterini kodda tutuyor, standart sözleşmenin beş iş günlük bildirimini başlangıçta kontrol ediyor, erişim kaydıyla bir ihlalin kapsamını ve 72 saatlik bildirimin son anını ilk saatte çıkarıyoruz.
Aydınlatma, Açık Rıza ve Çerezler: Consent Kaydı, Çerez Banner'ı, Consent Mode ve Ticari İleti İzinleri (İYS)
Aydınlatma her veri işlemede yapılır, açık rıza ise yalnız rızaya dayanan işlemede ve ayrıca alınır; rıza da ispat edilebilir, sürümlü ve geri alınabilir olmalıdır. Bookstore'da append-only ConsentRecord'u, Kurum'un çerez rehberine göre eşit butonlu bir Angular banner'ını, varsayılanı denied olan Google Consent Mode'u, bunları doğrulayan Playwright testlerini ve ticari e-posta izinlerinin üç iş günü içinde İYS'ye bildirilmesini kuruyoruz.
Log, Telemetry ve Analytics'te Kişisel Veri: URL'ler, Exception Mesajları, IP Adresi, Session Replay ve Hata Raporlama Araçları
Kişisel veri log'a çoğu zaman bir LogInformation satırıyla değil; URL'deki e-postayla, log'a verilen bir record'la, exception mesajıyla, span tag'iyle ve metric label'ıyla girer. Bookstore'un checkout akışında bu sızıntıları gerçek çıktılarla gösteriyor, canary değerleri arayan bir testle kilitliyor, tarayıcı hata raporlarını temizleyip IP adresini kısaltıyor ve telemetry'yi envantere ekliyoruz.
Saklama Süresi, Silme ve Anonimleştirme: "Hesabımı Sil", Soft Delete, Backup'lar, Cache'ler ve Periyodik İmha Job'ı
"Hesabımı sil" talebi tek bir DELETE değil, verinin her parçası için ayrı bir karardır: profil silinir, siparişler yasal süre boyunca kişiden koparılıp saklanır, süre dolunca anonimleşir. Bookstore'da foreign key tuzağını, soft delete'in neden yetmediğini, kopyaların silme yollarını, periyodik imha job'ını, imha kaydını ve backup'tan geri yüklemede silinen müşterinin geri gelmesini erasure ledger ile çözmeyi gerçek çıktılarla gösteriyoruz.
Kişisel Veriyi Korumak: Always Encrypted, Uygulama Seviyesinde Şifreleme, Pseudonymization, Maskeleme ve Test Verisi
Hassas bir kişisel veri alanını korumanın yolu, tehdide göre katman seçmektir: TDE diski, Always Encrypted DBA'yı, uygulama seviyesinde AES-GCM backup ve replica'yı korur, maskeleme ise yalnız ekranı. Bookstore'da fatura kimlik numarasını purpose'a bağlı AES-GCM ile şifreliyor, HMAC blind index ile arıyor, destek ekibine maskeli gösteriyor ve test ortamını Bogus ile sahte kontrol haneli sentetik veriye taşıyoruz.
Kişisel Veri Envanteri ve Privacy by Design: Veriyi Sınıflandırmak, Kodda İşaretlemek ve Minimizasyon
Kişisel veri envanterinin teknik yarısı koddan üretilebilir: entity'leri Microsoft.Extensions.Compliance attribute'larıyla sınıflandırıp EF Core modelinden tablo, sütun, amaç, saklama süresi ve kopyalar listesini çıkarıyoruz. Sınıflandırılmamış alanı yakalayan test, SQL Server sensitivity label script'i, doğum tarihi yerine yaş onayı gibi minimizasyon kararları, PCI DSS ve LINDDUN ile Bookstore üzerinde gerçek çıktılarla.
Geliştirici için KVKK ve GDPR: Kişisel Veri, Özel Nitelikli Veri, Veri Sorumlusu/Veri İşleyen ve Kodu Etkileyen İlkeler
Kişisel veri, başka bir kayıtla kişiye bağlanabilen her bilgidir; bu yüzden hash'lenmiş e-posta, IP adresi ve cihaz kimliği de kişisel veridir. 6698 sayılı Kanun ve GDPR'ın tanımlarını, veri sorumlusu ile veri işleyen ayrımını, ilgili kişi haklarının endpoint karşılıklarını, 7499 ile 2024'te değişenleri ve KVKK–GDPR farklarını Bookstore üzerinde, çalıştırılmış kod ve birincil kaynaklarla anlatıyoruz; hukuki tavsiye değildir.
Uçtan Uca: Bookstore Pipeline'ında Güvenlik Gate'leri, İstisna Yönetimi ve Ölçüm
Gürültüsüz bir güvenlik pipeline'ı PR'da yalnız geliştiricinin dakikalar içinde düzeltebileceği kontrolleri, main'de derin kontrolleri çalıştırır; fix'i olan critical ve high bulgu kırar, gerisi sahibi ve bitiş tarihi olan istisnalarla izlenir. Bookstore'un tek workflow'unu, süresi dolan istisnayı yakalayan bir gate'i, zafiyet yaşı ve MTTR ölçümünü, OpenSSF Scorecard'ı ve kontrollerin OWASP Top 10:2025 eşlemesini gerçek çıktılarla gösteriyoruz.
İmzalama ve Provenance: Sigstore, Artifact Attestation'ları ve SLSA v1.2
Bir image imzası içeriğin değişmediğini ve kimin imzaladığını, provenance ise hangi repo, workflow ve commit'ten üretildiğini kanıtlar; ikisi de ancak deploy anında doğrulanırsa işe yarar. Keyless Sigstore imzasını ve GitHub attestation'larını gerçek release'ler üzerinde doğruluyor, Bookstore image'ına SBOM attestation'ı bağlıyor, Kyverno ile imzasız ve tag'li image'ı reddediyor ve pipeline'ı SLSA v1.2'ye göre değerlendiriyoruz.
SBOM ve VEX: CycloneDX 1.7 ve SPDX 3 ile Ne Kullandığını Bilmek
SBOM, bir sürümün içindeki bileşenlerin makine okunur listesidir ve asıl değeri yeni bir CVE geldiğinde hangi ürünün hangi sürümünün etkilendiğini build almadan sorgulayabilmektir; VEX ise etkilenip etkilenmediğini gerekçesiyle beyan eder. Bookstore için .NET, Angular ve image SBOM'larını üretip doğruluyor, Dependency-Track'te sorguluyor ve OpenVEX ile CycloneDX VEX'i gerçek çıktılarla uyguluyoruz.
DAST: ZAP ile Çalışan Uygulamayı Taramak — Baseline, API Scan ve Authenticated Tarama
DAST çalışan uygulamaya dışarıdan istek gönderip header, cookie, hata sızıntısı ve yansıyan girdi gibi davranış açıklarını bulur; ama yalnız ulaşabildiği endpoint'leri tarar ve authorization hatasını göremez. Bookstore.Api'yi ZAP 2.17 ile baseline, API scan ve Automation Framework planıyla tarıyor, token'lı taramada oturumun düştüğünü yakalamayı, bulguları integration teste çevirmeyi ve main'de çalışan DAST job'ını gerçek çıktılarla gösteriyoruz.
Container ve IaC Scanning: Image Zafiyetleri, Base Image Seçimi ve Manifest Taraması
Image taraması, deploy edilen artifact'taki işletim sistemi paketlerini ve uygulama bağımlılıklarını birlikte denetler; bulguların çoğu kullanılmayan paketlerden gelir ve chiseled, non-root bir base image bunları büyük ölçüde ortadan kaldırır. Bookstore image'ında 42 bulgunun 6'ya inişini, Trivy ile Grype'ın farkını, Mart 2026 Trivy olayından sonra tarayıcıyı SHA ve cosign imzasıyla doğrulamayı, Dockerfile, Kubernetes ve Terraform taramasını gerçek çıktılarla gösteriyoruz.