Якщо ви встановлюєте плагін «Last Login» і раптом екран «Користувачі» у WordPress стає організованим, ця охайність вас обманює. Дати виглядають переконливо. Ви можете їх сортувати. Вони здаються незаперечними фактами. Але це не так. WordPress ніколи не зберігав дату останнього входу нативно, і кожне значення в цьому стовпці є артефактом вибіркової пам'яті.
Історія, якої ніколи не було
WordPress зберігає облікові записи у простій таблиці користувачів. Він зберігає імена, електронні адреси, хеші паролів і дати реєстрації. Помітно бракує будь-якого поля, яке фіксувало б, коли хтось востаннє проходив автентифікацію. Так було завжди.
Коли ви встановлюєте плагін, щоб заповнити цю прогалину, він підключається до процесу входу та записує мітку часу в метадані користувача. Це і є весь механізм. Він не звертається до минулих логів сервера і не реконструює попередні сесії. Він просто починає спостереження з моменту активації.
Уявіть сайт, який працює вже п'ять років. За цей час увійшли в систему сотні редакторів, підписників і підрядників. Ви встановлюєте плагін відстеження у вівторок вдень. У середу вранці заходить старший редактор. Плагін записує час і дату. Але ваш власний адмінський акаунт нічого не показує, бо ви не заходили в систему з моменту встановлення. Старий акаунт фрілансера від 2021 року також нічого не показує. Стовпець створює враження, ніби ніхто з вас ніколи не заходив на сайт. Насправді ж у запису просто не було минулого. Він сприймає відсутність даних як доказ відсутності [діяльності], що є небезпечним припущенням, коли ви керуєте доступом.
Три способи, якими цей стовпець вводить вас в оману
Після запуску плагіна ілюзія змінюється: від відсутності історії до спотвореного звітування про теперішній час. Існує три конкретні пастки.
Він відстежує автентифікацію, а не активність
Коли користувач ставить галочку «Запам'ятати мене» на екрані входу WordPress, браузер отримує автентифікаційний cookie, який може залишатися дійсним до чотирнадцяти днів. Протягом цього вікна користувач може відкривати панель керування, публікувати дописи, модерувати коментарі та оновлювати налаштування, ніколи не вводячи пароль повторно. Його сесія жива та активна.
Проте більшість плагінів «Last Login» слухають екшн wp_login. Цей екшн спрацьовує лише тоді, коли облікові дані надсилаються через форму, а не тоді, коли оновлюється існуюча сесія. Отже, ваш редактор може увійти в систему в понеділок вранці, підтримувати сесію браузера активною та працювати в адмінці щодня протягом двох тижнів поспіль. У стовпці все одно буде вказано, що вхід був чотирнадцять днів тому. Перевірка безпеки на основі цієї мітки часу позначить акаунт як неактивний. Але він зовсім не неактивний. Ви бачите, коли було введено пароль, а не коли людина востаннє була у вашому домі.
Він приховує неактивні акаунти під час аудитів
Більшість плагінів реалізують сортувальний стовпець шляхом об'єднання таблиці користувачів з таблицею usermeta. Структурно це має сенс. Практично ж це створює баг видимості.
Якщо користувач ніколи не проходив автентифікацію з моменту активації плагіна, у таблиці usermeta просто немає рядка для цього ключа. Коли ви сортуєте список користувачів за «Last Login», щоб знайти найбільш застарілі акаунти, базовий запит часто виключає користувачів, у яких відсутні метадані. Вони повністю зникають із відсортованого вигляду.
Ви проводите аудит для очищення. Ви сортуєте за спаданням і бачите сорок користувачів із дедалі старішими датами. Ви впевнено визначаєте групу для відключення. Але ви так і не побачили десять акаунтів підрядників, які мовчали вісім місяців, тому що вони жодного разу не активували трекер. Ці акаунти не з'являються у відсортованому списку, тому вони не потрапляють і у ваші висновки. Ваш аудит буквально видаляє власні результати. На сайтах з членством, платформах електронного навчання або в мережах multisite це особливо тривожно, оскільки зловмисники часто першими атакують саме неактивні акаунти.
Дані існують лише тоді, коли вони марні
Тут є певна іронія. Ядро WordPress все ж знає дещо про сесії користувачів. Коли хтось входить у систему, система генерує токени сесій і зберігає їх у метаданих користувача. Адміністратор може переглянути активні сесії та завершити їх. Але ці знання стосуються лише поточного моменту. Щойно користувач натискає «Вийти» або термін дії сесії закінчується, WordPress видаляє токен. Запис випаровується.
Ви можете бачити, хто онлайн прямо зараз. Ви не можете легко побачити, хто був онлайн учора об десятій ранку. Архітектура була побудована для керування сесіями в реальному часі, а не для історичного
