Kimlik ve güvenlik
Çerez tabanlı oturum ve güvenli çerez nitelikleri
HttpOnly, Secure ve SameSite: üç nitelik, üç farklı saldırıya karşı koruma.
Kavramı anlayalım
Oturum bilgisi bir çerezde taşındığında tarayıcı onu ilgili siteye yapılan her isteğe otomatik ekler. Bu kolaylık doğru niteliklerle korunmalıdır. HttpOnly, çerezin JavaScript tarafından okunmasını engeller; sayfada bir XSS açığı olsa bile oturum çerezi document.cookie ile çalınamaz. Secure, çerezin yalnız HTTPS üzerinden gönderilmesini sağlar.
SameSite, çerezin başka bir siteden başlatılan isteklere eklenip eklenmeyeceğini belirler. Strict, yalnız aynı siteden gelen isteklerde gönderir; Lax, üst düzey gezinmelere (bir bağlantıya tıklamak) izin verir ama başka siteden gelen POST isteklerinde göndermez. Bu, CSRF saldırılarına karşı önemli bir katmandır.
Bu projenin yönetim paneli de bu yaklaşımı kullanır: API’nin ürettiği token tarayıcıdaki JavaScript’e hiç verilmez; Next.js onu HttpOnly, Secure ve SameSite=Strict bir çereze yazar. Simülatördeki ‘Giriş yap’ senaryosu bu akışı adım adım gösterir.
Oturum çerezi, kullanıcının kimliğidir; çalınması hesabın ele geçirilmesi demektir.
Token’ı localStorage’da saklamak; sayfadaki herhangi bir XSS açığı onu okuyabilir.
Bir mektubun şehirdeki yolculuğu
İsteği bir mektup, sunucuyu bir şehir gibi düşün. Senaryo seç, oynat ve mektubun hangi kapıdan geçip nerede durdurulduğunu izle.
Giriş formunu gönderdin. Parolan şifreli tünelin içinde gidiyor, adres çubuğunda görünmüyor.
Aynı konu. Üç farklı derinlik.
Set-Cookie: admin_session=eyJ…; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=1800Üç güvenlik niteliği ve kısa ömürlü bir oturum.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Bir SPA, JWT’yi localStorage’da tutuyor ve her isteğe Authorization başlığıyla ekliyor. Sayfaya üçüncü taraf bir yorum eklentisi ekleniyor. Risk nedir ve nasıl azaltılır?
Çözümü ve açıklamasını göster
Eklentideki veya sayfadaki herhangi bir XSS, localStorage’daki token’ı okuyup dışarı gönderebilir.
Azaltma: token’ı HttpOnly + Secure + SameSite çerezde tutmak (BFF deseni),
kısa ömür, sıkı Content-Security-Policy ve çıktı kodlama.JavaScript’in erişebildiği her depo, aynı sayfada çalışan her kodun erişebildiği depodur.