Jeśli zainstalujesz wtyczkę „Last Login” i nagle ekran Użytkownicy w WordPress zacznie wyglądać na uporządkowany, ta schludność Cię oszukuje. Daty wydają się wiarygodne. Możesz je sortować. Wyglądają jak twarde fakty. Takimi nie są. WordPress nigdy nie przechowywał natywnej daty ostatniego logowania, a każda wartość w tej kolumnie jest artefaktem selektywnej pamięci.
Historia, która nigdy nie istniała
WordPress przechowuje konta w prostej tabeli użytkowników. Przechowuje nazwy, adresy e-mail, hashowane hasła i daty rejestracji. Wyraźnie brakuje w niej jakiegokolwiek pola rejestrującego, kiedy ktoś ostatnio się uwierzytelnił. Tak było od zawsze.
Kiedy instalujesz wtyczkę, aby wypełnić tę lukę, podpina się ona pod proces logowania i zapisuje znacznik czasu w metadanych użytkownika. To cała mechanika. Nie przeszukuje ona wstecz logów serwera ani nie rekonstruuje poprzednich sesji. Po prostu zaczyna obserwować od momentu jej aktywacji.
Wyobraź sobie stronę, która działa od pięciu lat. W tym czasie zalogowały się setki redaktorów, subskrybentów i kontrahentów. Instalujesz wtyczkę do śledzenia we wtorek po południu. W środę rano loguje się starszy redaktor. Wtyczka rejestruje czas i datę. Jednak Twoje własne konto administratora nie pokazuje nic, ponieważ nie logowałeś się od czasu instalacji. Stare konto freelancera z 2021 roku również nie pokazuje nic. Kolumna sprawia wrażenie, jakby żadne z Was nigdy nie korzystało ze strony. W rzeczywistości rejestracja po prostu nie miała przeszłości. Traktuje brak danych jako dowód nieobecności, co jest niebezpiecznym założeniem przy zarządzaniu dostępem.
Trzy sposoby, w jakie ta kolumna wprowadza Cię w błąd
Gdy wtyczka już działa, iluzja zmienia się z braku historii w błędne raportowanie czasu teraźniejszego. Istnieją trzy konkretne pułapki.
Śledzi uwierzytelnianie, a nie aktywność
Kiedy użytkownik zaznacza „Zapamiętaj mnie” na ekranie logowania WordPress, przeglądarka otrzymuje ciasteczko uwierzytelniające, które może pozostać ważne nawet przez czternaście dni. W tym oknie czasowym użytkownik może otwierać pulpit, publikować posty, moderować komentarze i aktualizować ustawienia bez ponownego wpisywania hasła. Jego sesja jest żywa i aktywna.
Większość wtyczek „last-login” nasłuchuje jednak akcji wp_login. Akcja ta uruchamia się tylko wtedy, gdy dane uwierzytelniające zostaną przesłane przez formularz, a nie wtedy, gdy odświeżana jest istniejąca sesja. Zatem Twój redaktor może zalogować się w poniedziałek rano, utrzymać sesję przeglądarki przy życiu i pracować w panelu administracyjnym codziennie przez dwa tygodnie z rzędu. Kolumna nadal wskazywałaby datę sprzed czternastu dni. Przegląd bezpieczeństwa oparty na tym znaczniku czasu oznaczy konto jako nieaktywne. A wcale nie jest nieaktywne. Patrzysz na to, kiedy wpisano hasło, a nie na to, kiedy człowiek ostatni raz był w Twoim domu.
Ukrywa nieaktywne konta podczas audytów
Większość wtyczek implementuje sortowalną kolumnę poprzez połączenie tabeli użytkowników z tabelą usermeta. Strukturalnie ma to sens. Praktycznie jednak tworzy to błąd widoczności.
Jeśli użytkownik nigdy się nie uwierzytelnił od czasu aktywacji wtyczki, w tabeli usermeta po prostu nie ma wiersza dla tego klucza. Gdy sortujesz listę użytkowników według „Last Login”, aby znaleźć najmniej aktywne konta, zapytanie bazodanowe często wyklucza użytkowników, którzy nie posiadają metadanych. Całkowicie wypadają oni z widoku posortowanego.
Przeprowadzasz audyt czyszczący. Sortujesz malejąco i widzisz czterdziestu użytkowników z coraz starszymi datami. Pewnie identyfikujesz grupę do dezaktywacji. Ale nigdy nie widziałeś dziesięciu kont kontrahentów, które milczą od ośmiu miesięcy, ponieważ ani razu nie wywołały trackera. Te konta nie pojawiają się na posortowanej liście, więc nie uwzględniasz ich w swoich wnioskach. Twój audyt dosłownie usuwa własne wyniki. Na stronach członkowskich, platformach e-learningowych lub sieciach multisite jest to szczególnie niepokojące, ponieważ nieaktywne konta to często te, w które pierwsi uderzają atakujący.
Dane istnieją tylko wtedy, gdy są bezużyteczne
Jest tu pewna cicha ironia. Rdzeń WordPress wie coś o sesjach użytkowników. Kiedy ktoś się loguje, system generuje tokeny sesji i przechowuje je w metadanych użytkownika. Administrator może przeglądać aktywne sesje i je kończyć. Ale ta wiedza dotyczy wyłącznie czasu rzeczywistego. W momencie, gdy użytkownik kliknie wyloguj lub sesja wygaśnie samoistnie, WordPress usuwa token. Zapis wyparowuje.
Możesz zobaczyć, kto jest online w tej chwili. Nie możesz łatwo sprawdzić, kto był online wczoraj o dziesiątej rano. Architektura została zbudowana do zarządzania sesjami w czasie rzeczywistym, a nie do celów historycznych.
