Могу ли я вести учет вошедших пользователей WordPress в Apache без использования плагина WordPress?

Вопрос или проблема

Я размещаю несколько сайтов на WordPress. Время от времени сайты одного из моих клиентов оказываются скомпрометированными, иногда из-за повторного использования пароля или чего-то подобного.

Я бы хотел иметь возможность добавлять информацию о логировании в Apache, чтобы лучше видеть, кто пытается войти в систему, и было бы еще лучше, если бы можно было добавлять имена пользователей (если пользователь вошел в систему) к каждому запросу в файле журнала доступа.

Кто-нибудь знает, возможно ли сделать что-то из этого без больших усилий и без необходимости установки плагина WordPress на каждый сайт? Если да, можете ли вы дать подсказки, как это сделать. Надеюсь, это можно сделать без mod_security или чего-то подобного, но я рассмотрю этот вариант, если это необходимо.

Я предполагаю, что, по крайней мере, должна существовать переменная post, которую я могу записывать каждый раз, когда кто-то пытается войти через /wp-admin, и это было бы полезно, но было бы еще лучше, если бы я мог сделать что-то более надежное.

Ответ или решение

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

Теория

Когда пользователи авторизуются на сайте WordPress, им присваивается сессия с уникальным идентификатором, обычно с использованием файлов cookies. WordPress предоставляет API для аутентификации, а также обрабатывает запросы пользователей через файл wp-login.php. Чтобы добавить информацию о пользователе, вошедшем на сайт, в лог файлы Apache, важно понять, на каком уровне можно интегрировать эти данные и каким образом они доступны.

Apache по умолчанию логирует запросы с использованием формата, который не включает специфические данные аутентификации пользователей. Однако, используя настраиваемые логи, такие как LogFormat и CustomLog, можно изменить формат логирования, чтобы включать дополнительные данные. Но самое сложное – это связывание данных WordPress с данными, которые доступна Apache.

Пример

Представьте себе, что у нас есть несколько сайтов на одной платформе, они все используют WordPress, и у вас нет возможностей или желания использовать плагины для расширения функциональности. Вашей целью является логирование пользователей в формате: username@example.com - [дата] "Запрос" код

Для этой цели можно использовать вызовы PHP и инициализацию файлов cookies для извлечения имени пользователя. Простым примером может служить добавление кастомного кода в файл functions.php вашей темы. Например:

add_action('init', 'log_user_activity');

function log_user_activity() {
    if (is_user_logged_in()) {
        $current_user = wp_get_current_user();
        $username = $current_user->user_login;
        $ip = $_SERVER['REMOTE_ADDR'];
        $url = $_SERVER['REQUEST_URI'];
        error_log("$username - $ip accessed $url");
    }
}

Этот код логирует IP-адрес и URL-запрос вместе с именем пользователя. Однако это логируется в логи PHP ошибки и вам потребуется соединить их с логами Apache.

Применение

  1. Модуль mod_rewrite и mod_headers: Используйте Apache модули, чтобы манипулировать заголовками запросов. Это может позволить передать идентификатор пользователя или имя в логи Apache через заголовки запросов, если они известны вашей PHP логике:

    RewriteEngine on
    RewriteCond %{HTTP_COOKIE} ^.*wordpress_logged_in.*$
    RewriteRule ^ - [E=WP_USER:%{HTTP:my-wp-user-header}]
  2. Интерфейс CGI и скрипты: Создание скриптов, работающих с API WordPress для извлечения данных о пользователя и последующего добавления их в формат логов:

    #!/bin/bash
    USERNAME=$(php -r "require('wp-load.php'); echo wp_get_current_user()->user_login;")
    echo "SetEnv user_name $USERNAME"
  3. Логи второго уровня и асинхронный сбор данных: Интеграция внешних систем логирования, таких как Elasticsearch и Kibana, для сохранения и анализа логов. Это позволит отслеживать и анализировать чрезвычайные события без нагрузки на сервер.

  4. Системы безопасности и анализаторы: Использование инструментов для обеспечения безопасности, таких как fail2ban, могут добавить второй уровень мониторинга активности пользователей.

  5. Каталоги и обработки: Создание автоматизированных процессов, «склеивающих» (связывающих) логи PHP ошибок с логами Apache, может обеспечить целостность данных.

Заключение

Без использования плагинов WordPress задача по логированию активности пользователей в Apache становится более технически сложной, требующей дополнительных скриптов или даже модулей Apache для обработки специфической информации. Необходимы глубокие интеграции между PHP и Apache, а также креативный подход к обработке и управлению потоками пользовательских данных. Хотя настройка может быть сложной, автоматизация этого процесса и учет всех переменных позволит вам создать более надежную и безопасную систему, которая будет отвечать вашим потребностям в отслеживании активности пользователей без значительного увеличения нагрузки на серверные ресурсы.

Оцените материал
Добавить комментарий

Капча загружается...