Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 7 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Oturum kimliği, kullanıcının giriş yapmış durumunu sunucuya kanıtlayan değerdir. Kullanıcı giriş yaptıktan sonra bu kimlik yenilenmelidir; çünkü saldırgan girişten önce bilinen veya kullanıcıya kullandırılan eski oturum kimliğini biliyorsa, kimlik değiştirilmezse kurbanın giriş yapmış oturumunu ele geçirmeye çalışabilir. Bu saldırı oturum sabitleme (session fixation) olarak adlandırılır.

Sorun nasıl oluşur?​


Normal akışta tarayıcı bir oturum çerezi taşır. Kullanıcı giriş formunu gönderdiğinde sunucu parolayı doğrular ve bu oturum kimliğini yetkili hale getirir. Eski kimlik girişten önce saldırgan tarafından biliniyorsa, saldırgan aynı kimlikle sunucuya istek göndererek kurbanın hesabına erişebilir.

Giriş başarılı olduğunda sunucu, yalnız gerekli ve güvenilir oturum verilerini kontrollü taşıyarak yeni ve öngörülemez bir oturum kimliği üretmelidir. Eski kimlik geçersiz bırakılmalıdır. Böylece girişten önce bilinen değer, giriş sonrasında yetkili oturum olarak kullanılamaz.

Bu işlem yalnızca çerezi tarayıcıda değiştirmek değildir. Sunucu tarafındaki oturum kaydı da yeni kimliğe taşınmalı veya yeniden oluşturulmalı ve eski kayıt geçersiz kılınmalıdır. Kimlik yenileme başarısız olursa kullanıcı yetkili hale getirilmemelidir.

Somut örnek​


Bir ziyaretçi giriş sayfasını açtığında oturum kimliği A olsun. Saldırgan bu değeri bir şekilde kurbana kullandırmayı başarır. Kurban doğru parolayı girer ve sunucu kimlik A değerini değiştirmeden yetkili kabul ederse, saldırgan A ile yaptığı isteklerde kurbanın oturumunu kullanabilir.

Güvenli akışta ise parola doğrulandıktan sonra sunucu A yerine B gibi yeni bir kimlik üretir, kullanıcı hesabını B oturumuna bağlar ve A değerini geçersiz kılar. Saldırganın bildiği eski değer artık yetki taşımaz.

KontrolBeklenen davranışHata işareti
Giriş öncesi kimlikGirişten sonra yetki taşımazEski kimlik giriş sonrası yetkiyle kabul edilir
Yeni kimlikÖngörülemez ve sunucuda geçerlidirEski değerle aynı veya istemcinin seçtiği değer
Oturum verisiYalnız gerekli veriler yeni oturuma aktarılırİstemciden gelen rol veya yetki bilgisi kullanılır
ÇıkışSunucu oturumu geçersiz kılarÇerez silinse bile eski kimlik çalışır


Uygulanacak işlem​


Giriş işlemini aşağıdaki sırayla tasarlayın:

  1. Kullanıcının gönderdiği kimlik bilgilerini doğrulayın. Başarısız girişte oturumu yetkili duruma getirmeyin.
  2. Doğrulama başarılıysa sunucu tarafında oturum kimliğini yenileyin. Kullanılan dil veya çatının kimlik döndürme işlevini tercih edin; yalnızca yeni bir çerez yazmakla yetinmeyin.
  3. Gerekli ve güvenilir oturum verilerini yeni oturuma taşıyın. Kullanıcı adı veya hesap kimliği gibi değerleri sunucunun doğruladığı sonuçtan yeniden yazın; istemciden gelen yetki alanlarına güvenmeyin.
  4. Eski oturum kaydını geçersiz kılın ve yeni kimlikle kullanıcıyı yetkili olarak işaretleyin.
  5. Yeni oturum çerezini güvenli çerez özellikleriyle gönderin. HTTPS kullanın; çerezin JavaScript tarafından okunmasını gerektirmiyorsa HttpOnly, istek bağlamına uygun olarak Secure ve uygun SameSite politikasını belirleyin.
  6. Girişten sonra yetki kontrolü yapan bir sayfayı test edin. Eski kimlikle yapılan isteğin reddedildiğini, yeni kimlikle yapılan isteğin ise yalnızca doğru kullanıcı hesabına eriştiğini doğrulayın.

Kimlik döndürme ile oturumun sona erdirilmesi aynı işlem değildir. Girişte mevcut oturumun kimliği yenilenir. Çıkışta ise oturum sunucuda sonlandırılır, yetkili bilgiler silinir ve tarayıcıdaki oturum çerezi temizlenir. Parola değişikliği veya hesabın kritik güvenlik ayarlarının değiştirilmesi gibi olaylarda, uygulamanın güvenlik politikasına göre diğer aktif oturumların da sonlandırılması gerekebilir.

Bu kontrolleri kendi yalıtılmış deneme ortamınızda, özel test hesabıyla yapın; gerçek kullanıcı kimliklerini günlüğe veya ekran paylaşımına taşımayın. Tarayıcının geliştirici araçlarında giriş öncesi ve sonrası çerez değerlerini karşılaştırabilirsiniz; ancak asıl ölçüt, eski kimliğin sunucu tarafından yetkili kabul edilmemesidir. Yeni çerez görünmesine rağmen eski kimlik giriş sonrası yetkiyle çalışıyorsa döndürme eksiktir. Anonim eski kaydı yarış koşulları için kısa süre tutmak ile eski kimliğe yetki vermek aynı şey değildir.

Sık yapılan hatalar​


En yaygın hata, yalnızca giriş yanıtında yeni bir çerez göndermek fakat eski sunucu oturumunu iptal etmemektir. Bir diğer hata, kullanıcı kimliğini yeni oturuma taşımak yerine istemciden gelen bir alanı yetki kaynağı kabul etmektir. Ayrıca oturum kimliğini URL parametresinde taşımak, kimliğin geçmiş, günlük ve yönlendiren bilgileri içinde sızmasına yol açabileceğinden kaçınılmalıdır.

Girişten sonra kimlik yenilemek tek başına tüm oturum güvenliğini sağlamaz. HTTPS, güvenli çerez ayarları, sunucu tarafında yetki denetimi ve uygun çıkış işlemi birlikte uygulanmalıdır. Kimlik döndürme sırasında alışveriş sepeti gibi anonim oturum verileri korunacaksa, bunun yalnızca beklenen verilerle sınırlı olduğundan emin olun.

Sık sorulan sorular​

Birden çok sekme veya paralel istek oturumu bozabilir mi?​

Kimlik yenilenirken eski değerle yola çıkmış istekler bulunabilir. Eski depolama kaydını düşünmeden silmek bazı çatı ve depolarda oturum kaybı veya yarış koşulu doğurur. Çatının belgelenmiş yenileme akışını kullanın; eski kimliğin giriş sonrası yetkiye ulaşmasına izin vermeden paralel istekleri test edin.

Kimlik yenilenince CSRF belirteci de yenilenmeli mi?​

Kimlik döndürme CSRF korumasının yerine geçmez. Giriş gibi güven sınırı değişiminde CSRF durumunu çatının belgelenmiş akışıyla yönetin; eski formlar yeni oturumda reddedilebilir. Kullanıcıya yeniden yükleme olanağı sağlayın. Rastgele bir alanı korumak uğruna anonim istekle yetkili oturum arasında bağ kurmayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic