Eğer bir “Last Login” eklentisi kurarsanız ve aniden WordPress Kullanıcılar ekranınız düzenli görünmeye başlarsa, bu düzen size yalan söylüyor demektir. Tarihler otoriter görünür. Onları sıralayabilirsiniz. Kesin gerçekler gibi dururlar. Değillerdir. WordPress hiçbir zaman yerleşik bir son giriş tarihi saklamamıştır ve o sütundaki her değer seçici bir hafızanın ürünüdür.

Hiç Var Olmamış Tarihçe

WordPress hesapları basit bir kullanıcılar (users) tablosunda tutar. İsimleri, e-postaları, parola özetlerini (password hashes) ve kayıt tarihlerini saklar. Birinin en son ne zaman kimlik doğrulaması yaptığını kaydeden herhangi bir alanın eksikliği ise göze çarpar. Durum her zaman böyleydi.

Bu boşluğu doldurmak için bir eklenti kurduğunuzda, eklenti giriş sürecine bağlanır (hook) ve kullanıcı meta verilerine (user metadata) bir zaman damgası yazar. Mekanizma tamamen bundan ibarettir. Sunucu günlüklerinize (server logs) geriye dönük olarak ulaşmaz veya önceki oturumları yeniden oluşturmaz. Sadece siz onu etkinleştirdiğiniz andan itibaren izlemeye başlar.

Beş yıldır faaliyet gösteren bir site hayal edin. Bu süre zarfında yüzlerce editör, abone ve yüklenici giriş yaptı. Bir Salı öğleden sonra bir takip eklentisi kuruyorsunuz. Çarşamba sabahı kıdemli bir editör giriş yapıyor. Eklenti zamanı ve tarihi kaydediyor. Ancak kendi yönetici (admin) hesabınız hiçbir şey göstermiyor, çünkü kurulumdan beri giriş yapmadınız. 2021'den kalma eski bir freelancer hesabı da hiçbir şey göstermiyor. Sütun, ikinizin de siteye daha önce hiç dokunmadığı izlenimini veriyor. Gerçekte ise kayıt işlemi sadece geçmişe sahip değildi. Veri yokluğunu, yokluğun kanıtı olarak kabul ediyor; bu da erişimi yönetirken tehlikeli bir varsayımdır.

Sütunun Sizi Yanıltma Yolları

Eklenti çalışmaya başladıktan sonra, yanılsama eksik tarihten, bozulmuş bir şimdiki zaman raporlamasına dönüşür. Üç spesifik tuzak vardır.

Etkinliği değil, kimlik doğrulamayı takip eder

Bir kullanıcı WordPress giriş ekranında “Beni Hatırla” (Remember Me) seçeneğini işaretlediğinde, tarayıcı on dört güne kadar geçerli kalabilen bir kimlik doğrulama çerezi (authentication cookie) alır. Bu süre zarfında kullanıcı, şifresini tekrar yazmaya gerek duymadan paneli açabilir, yazılar yayınlayabilir, yorumları denetleyebilir ve ayarları güncelleyebilir. Oturumu canlı ve aktiftir.

Ancak çoğu son giriş eklentisi, wp_login eylemini (action) dinler. Bu eylem, mevcut bir oturum yenilendiğinde değil, yalnızca kimlik bilgileri form aracılığıyla gönderildiğinde tetiklenir. Dolayısıyla editörünüz bir Pazartesi sabahı giriş yapabilir, tarayıcı oturumunu açık tutabilir ve iki hafta boyunca her gün yönetim alanında çalışabilir. Sütun hala on dört gün öncesini gösterecektir. Bu zaman damgasına dayalı bir güvenlik incelemesi, hesabı hareketsiz (dormant) olarak işaretleyecektir. Oysa hesap hiç de hareketsiz değildir. Siz bir şifrenin ne zaman yazıldığına bakıyorsunuz, bir insanın evinize en son ne zaman girdiğine değil.

Denetimler sırasında hareketsiz hesapları gizler

Çoğu eklenti, sıralanabilir sütunu kullanıcılar tablosunu usermeta tablosuyla birleştirerek (join) uygular. Yapısal olarak bu mantıklıdır. Pratik olarak ise bir görünürlük hatası yaratır.

Eğer bir kullanıcı eklentiyi etkinleştirdiğinizden beri hiç kimlik doğrulaması yapmadıysa, usermeta tablosunda o anahtar (key) için bir satır bulunmaz. En eski hesaplarınızı bulmak için kullanıcı listesini “Son Giriş”e göre sıraladığınızda, alttaki sorgu genellikle meta verisi eksik olan kullanıcıları hariç tutar. Bu kullanıcılar sıralanmış görünümden tamamen çıkar.

Bir temizlik denetimi yapıyorsunuz. Azalan şekilde sıralıyorsunuz ve giderek eski tarihlere sahip kırk kullanıcı görüyorsunuz. Güvenle devre dışı bırakılacak bir grup belirliliyorsunuz. Ancak, takipçiyi bir kez bile tetiklemedikleri için sekiz aydır sessiz kalan on yüklenici hesabını hiç görmediniz. Bu hesaplar sıralanmış listede görünmez, bu nedenle sonuçlarınıza da yansımazlar. Denetiminiz kelimenin tam anlamıyla kendi bulgularını siler. Üyelik sitelerinde, e-öğrenme platformlarında veya multisite ağlarında bu durum özellikle endişe vericidir; çünkü saldırganların ilk hedef aldığı hesaplar genellikle hareketsiz olanlardır.

Veri yalnızca işe yaramaz olduğunda mevcuttur

Burada sessiz bir ironi var. WordPress çekirdeği (core), kullanıcı oturumları hakkında bir şeyler bilir. Birisi giriş yaptığında sistem oturum jetonları (session tokens) oluşturur ve bunları kullanıcı meta verilerinde saklar. Bir yönetici aktif oturumları görebilir ve bunları sonlandırabilir. Ancak bu bilgi kesinlikle canlıdır. Kullanıcı çıkış yaptığında veya oturum kendiliğinden sona erdiğinde, WordPress jetonu siler. Kayıt buharlaşır.

Şu an kimin çevrimiçi olduğunu görebilirsiniz. Dün sabah saat onda kimin çevrimiçi olduğunu kolayca göremezsiniz. Mimari, gerçek zamanlı oturum yönetimi için inşa edilmiştir, geçmişe dönük...