Автоматический сбор логов и анализ безопасности WordPress

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

Почему важен автоматический сбор логов в WordPress

Стандартные логи сервера часто содержат огромный объем информации, не всегда структурированной и удобной для быстрого анализа. Особенно это актуально на shared-хостингах, где доступ к системным логам ограничен. Автоматический сбор логов внутри WordPress позволяет:

Рассмотрим, как это реализовать на примере собственного кода с префиксом WPDetect.

Создание функции для записи логов в отдельную таблицу

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

function wpdetect_create_log_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpdetect_logs';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (" .
           "id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, " .
           "log_type VARCHAR(50) NOT NULL, " .
           "message TEXT NOT NULL, " .
           "user_id BIGINT(20) UNSIGNED NULL, " .
           "ip_address VARCHAR(45) NOT NULL, " .
           "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " .
           "PRIMARY KEY(id)) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

function wpdetect_log_event($log_type, $message, $user_id = null) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpdetect_logs';
    $ip_address = $_SERVER['REMOTE_ADDR'] ?? 'unknown';

    $wpdb->insert($table_name, [
        'log_type' => $log_type,
        'message' => $message,
        'user_id' => $user_id,
        'ip_address' => $ip_address,
        'created_at' => current_time('mysql')
    ]);
}

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

Пример автоматического логирования ошибок и входов пользователей

Теперь добавим хуки, которые будут автоматически записывать в лог ошибки PHP и успешные входы пользователей:

add_action('wp_login', function($user_login, $user) {
    wpdetect_log_event('login', 'Пользователь вошел: ' . $user_login, $user->ID);
}, 10, 2);

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    $message = "Ошибка PHP: [$errno] $errstr в $errfile на строке $errline";
    wpdetect_log_event('php_error', $message);
    return false; // позволяет стандартному обработчику продолжить работу
});

Так мы фиксируем два важных типа событий — логины и ошибки, что уже дает фундамент для анализа безопасности.

Анализ логов: поиск подозрительной активности

Для анализа можно создать функцию, которая будет искать в логах аномалии, например, множественные ошибки входа с одного IP, частые ошибки PHP или попытки доступа к запрещенным страницам.

function wpdetect_analyze_logs() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpdetect_logs';
    $results = [];

    // Пример: поиск IP с более чем 5 ошибками входа за последний час
    $one_hour_ago = date('Y-m-d H:i:s', strtotime('-1 hour'));
    $sql = $wpdb->prepare(
        "SELECT ip_address, COUNT(*) as error_count FROM $table_name " .
        "WHERE log_type = %s AND created_at > %s GROUP BY ip_address HAVING error_count > 5",
        'login_failed', $one_hour_ago
    );
    $results['suspicious_ips'] = $wpdb->get_results($sql);

    // Аналогично можно добавить другие проверки

    return $results;
}

Такой анализ можно запускать по cron или вручную, выводя результаты в админке.

Интеграция с плагинами безопасности

Если вы используете плагины безопасности, например Clearfy Pro, можно расширять их возможности своими логами и анализом. Например, отправлять на email уведомления при обнаружении подозрительной активности или автоматически блокировать IP.

Выводы и рекомендации

Автоматический сбор и анализ логов — незаменимый инструмент для мониторинга безопасности WordPress. Используя небольшой собственный код с функциями WPDetect, можно быстро настроить эффективный сбор важных событий и выполнять базовый анализ без сложных систем. Для более глубокой защиты рекомендуется дополнять систему популярными плагинами безопасности и регулярно обновлять WordPress и все компоненты.

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

Как автоматизировать удаление неиспользуемых постов по типу и статусу в WordPress
14.12.2025
Как автоматизировать удаление старых заказов в WooCommerce по дате и статусу
07.01.2026
Как создать собственный плагин WordPress с примером кода
31.10.2025
Как удалить неиспользуемые таблицы в базе данных WordPress
07.11.2025
Обслуживание REST API WordPress — практические советы и примеры кода
29.11.2025