Если вы устанавливаете плагин «Last Login» и внезапно экран «Пользователи» в WordPress становится упорядоченным, эта аккуратность обманчива. Даты выглядят убедительно. Их можно сортировать. Они кажутся неоспоримыми фактами. Но это не так. WordPress никогда не хранил дату последнего входа в нативном виде, и каждое значение в этом столбце — лишь артефакт избирательной памяти.

История, которой никогда не было

WordPress хранит учетные записи в простой таблице пользователей. В ней хранятся имена, адреса электронной почты, хеши паролей и даты регистрации. Заметно отсутствие любого поля, которое фиксировало бы, когда пользователь проходил аутентификацию в последний раз. Так было всегда.

Когда вы устанавливаете плагин, чтобы восполнить этот пробел, он подключается к процессу входа и записывает временную метку в метаданные пользователя. Это и есть весь механизм. Он не обращается к логам вашего сервера задним числом и не восстанавливает предыдущие сессии. Он просто начинает следить с того момента, как вы его активировали.

Представьте сайт, который работает уже пять лет. За это время в него вошли сотни редакторов, подписчиков и подрядчиков. Вы устанавливаете плагин отслеживания во вторник днем. В среду утром заходит старший редактор. Плагин записывает время и дату. Но ваш собственный аккаунт администратора ничего не показывает, потому что вы не входили в систему с момента установки. Старый аккаунт фрилансера от 2021 года также ничего не показывает. Столбец создает впечатление, что никто из вас никогда не заходил на сайт. На самом деле у записи просто нет прошлого. Она трактует отсутствие данных как доказательство отсутствия активности, а это опасное предположение, когда вы управляете доступом.

Три способа, которыми этот столбец вводит вас в заблуждение

Как только плагин начинает работать, иллюзия смещается от отсутствия истории к искаженной отчетности в настоящем времени. Существует три конкретные ловушки.

Он отслеживает аутентификацию, а не активность

Когда пользователь отмечает «Запомнить меня» на экране входа WordPress, браузер получает cookie-файл аутентификации, который может оставаться действительным до четырнадцати дней. В течение этого окна пользователь может открывать панель управления, публиковать посты, модерировать комментарии и обновлять настройки, ни разу не введя пароль заново. Его сессия жива и активна.

Однако большинство плагинов «Last Login» реагируют на действие wp_login. Это действие срабатывает только тогда, когда учетные данные отправляются через форму, а не когда обновляется существующая сессия. Таким образом, ваш редактор может войти в систему в понедельник утром, поддерживать сессию браузера активной и работать в админке каждый день в течение двух недель подряд. В столбце по-прежнему будет значиться дата четырнадцатидневной давности. Проверка безопасности, основанная на этой временной метке, пометит аккаунт как неактивный. Но он вовсе не неактивен. Вы видите, когда был введен пароль, а не когда человек в последний раз был в вашем «доме».

Он скрывает неактивные аккаунты во время аудита

Большинство плагинов реализуют сортируемый столбец путем объединения таблицы пользователей с таблицей usermeta. Структурно это логично. Практически же это создает баг видимости.

Если пользователь ни разу не проходил аутентификацию с момента активации плагина, в usermeta просто нет строки для этого ключа. Когда вы сортируете список пользователей по столбцу «Last Login», чтобы найти самые неактивные аккаунты, базовый запрос часто исключает пользователей, у которых отсутствуют метаданные. Они полностью исчезают из отсортированного представления.

Вы проводите аудит для очистки базы. Вы сортируете список по убыванию и видите сорок пользователей с датами, которые становятся всё более старыми. Вы уверенно выбираете группу для отключения. Но вы так и не увидели десять аккаунтов подрядчиков, которые молчат уже восемь месяцев, потому что они ни разу не активировали трекер. Эти аккаунты не появляются в отсортированном списке, а значит, они не попадают и в ваши выводы. Ваш аудит буквально удаляет собственные результаты. На сайтах с подпиской, платформах электронного обучения или в сетях multisite это особенно тревожно, так как неактивные аккаунты — это часто те цели, на которые нападающие нацеливаются в первую очередь.

Данные существуют только тогда, когда они бесполезны

Здесь есть тонкая ирония. Ядро WordPress всё же кое-что знает о пользовательских сессиях. Когда кто-то входит в систему, система генерирует токены сессий и сохраняет их в метаданных пользователя. Администратор может просматривать активные сессии и завершать их. Но эти знания строго относятся к текущему моменту. Как только пользователь нажимает «Выйти» или сессия истекает сама по себе, WordPress удаляет токен. Запись испаряется.

Вы можете видеть, кто находится в сети прямо сейчас. Но вы не можете легко увидеть, кто был в сети вчера в десять утра. Архитектура была создана для управления сессиями в реальном времени, а не для ведения истории.