Логирование событий входа в WordPress — важный инструмент для мониторинга безопасности и анализа активности пользователей. В этой статье мы подробно разберем, как добавить собственное логирование успешных и неудачных попыток входа, используя как код, так и готовые плагины. Это позволит вам отслеживать подозрительную активность, выявлять попытки взлома и собирать статистику для дальнейшего анализа.
Почему важно логировать события входа в WordPress
По умолчанию WordPress не хранит развернутые логи попыток авторизации. Это значит, что администратор сайта не видит подробной информации о том, кто и когда пытался войти, с какого IP-адреса, с какого устройства и т.п. Такие данные крайне полезны для:
- Выявления подозрительной активности и атак Brute Force;
- Анализа поведения пользователей на сайте;
- Улучшения общей безопасности и принятия мер по блокировке злонамеренных попыток;
- Отчётов для аудита и контроля доступа.
Добавив логирование, вы получите расширенный контроль над процессом входа, сможете оперативно реагировать на угрозы и повысить уровень безопасности вашего сайта.
Как добавить логирование входа через код в functions.php
Для начала рассмотрим, как создать собственный простой логгер, который будет записывать события входа в отдельный файл. Мы будем использовать хуки WordPress wp_login для успешного входа и wp_login_failed для неудачных попыток.
Запись успешных входов
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wplogin_ru_log_successful_login($user_login) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d H:i:s');
$log_entry = "SUCCESS LOGIN: User: $user_login | IP: $ip | Time: $time\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/login-logs.txt');
}
add_action('wp_login', 'wplogin_ru_log_successful_login', 10, 1);Этот код записывает имя пользователя, IP-адрес и время успешного входа в файл wp-content/login-logs.txt. Убедитесь, что у папки wp-content есть права на запись.
Запись неудачных попыток входа
Чтобы логировать неуспешные попытки, добавьте:
function wplogin_ru_log_failed_login($username) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d H:i:s');
$log_entry = "FAILED LOGIN: User: $username | IP: $ip | Time: $time\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/login-logs.txt');
}
add_action('wp_login_failed', 'wplogin_ru_log_failed_login');Теперь все попытки входа, включая ошибочные, будут фиксироваться в одном файле.
Дополнительные сведения для логирования
Чтобы сделать логи более информативными, можно добавить User Agent браузера, URL страницы входа и даже геолокацию по IP с помощью сторонних сервисов. Например, расширим функцию:
function wplogin_ru_log_successful_login_extended($user_login) {
$ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Direct';
$time = date('Y-m-d H:i:s');
$log_entry = "SUCCESS LOGIN: User: $user_login | IP: $ip | Agent: $user_agent | Referer: $referer | Time: $time\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/login-logs.txt');
}
remove_action('wp_login', 'wplogin_ru_log_successful_login');
add_action('wp_login', 'wplogin_ru_log_successful_login_extended', 10, 1);Так вы получите больше данных для анализа и сможете легче выявлять подозрительные попытки.
Использование плагинов для логирования входов в WordPress
Если вы не хотите писать код или хотите расширенные возможности, есть хорошие плагины для логирования входов, которые можно установить и настроить быстро:
- WP Activity Log — один из самых популярных плагинов для логирования активности пользователей, включая входы. Позволяет вести подробные отчеты, отправлять уведомления и фильтровать события.
- Simple Login Log — легкий плагин, который сохраняет логи успешных и неуспешных входов, выводит отчеты в админке.
- Loginizer — плагин для защиты от атак и логирования попыток входа, позволяет блокировать IP и имеет удобный интерфейс.
Все эти плагины можно найти на официальном репозитории WordPress. Для расширенной интеграции и поддержки русскоязычных пользователей рекомендуем ознакомиться с WP Activity Log от WPSHOP.
Пример создания собственного плагина для логирования входов
Если вы предпочитаете оформить код логирования в виде плагина, создайте файл wplogin-logs.php с таким содержанием:
<?php
/**
* Plugin Name: WPLogin Logs
* Description: Логирование успешных и неудачных входов в WordPress
* Version: 1.0
* Author: wplogin.ru
*/
function wplogin_ru_log_successful_login_plugin($user_login) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d H:i:s');
$log_entry = "SUCCESS LOGIN: User: $user_login | IP: $ip | Time: $time\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/login-logs.txt');
}
add_action('wp_login', 'wplogin_ru_log_successful_login_plugin', 10, 1);
function wplogin_ru_log_failed_login_plugin($username) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d H:i:s');
$log_entry = "FAILED LOGIN: User: $username | IP: $ip | Time: $time\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/login-logs.txt');
}
add_action('wp_login_failed', 'wplogin_ru_log_failed_login_plugin');
?>Загрузите плагин в папку wp-content/plugins, активируйте его в админке — и логи начнут записываться.
Как анализировать и использовать логи входов
Файл login-logs.txt можно просматривать через FTP или файловый менеджер хостинга. Для удобства можно подключить анализатор логов, например, импортировать данные в систему мониторинга или создать отдельную страницу в админке с выводом логов.
Для автоматизации можно написать скрипт, который будет отправлять вам уведомления при подозрительной активности — например, при большом числе неудачных попыток с одного IP.
Пример простой проверки количества неудачных входов с одного IP
function wplogin_ru_check_failed_logins($username) {
$ip = $_SERVER['REMOTE_ADDR'];
$log_file = WP_CONTENT_DIR . '/login-logs.txt';
$failed_count = 0;
if (file_exists($log_file)) {
$lines = file($log_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos($line, "FAILED LOGIN") !== false && strpos($line, "IP: $ip") !== false) {
$failed_count++;
}
}
}
if ($failed_count > 5) {
// Здесь можно добавить логику блокировки IP или отправки уведомления
}
}
add_action('wp_login_failed', 'wplogin_ru_check_failed_logins');Этот код подсчитывает неудачные попытки с текущего IP и при превышении порога можно выполнить нужные действия.