Диагностика подозрительной активности пользователей в WordPress
Часто администраторы сталкиваются с проблемой, когда на сайте появляются пользователи с подозрительной активностью: спам-комментарии, попытки взлома, массовая регистрация ботов и т.д. Для эффективного управления важно сначала выявить таких пользователей. Основные признаки подозрительных аккаунтов:
- Пользователи без аватара и с пустыми или странными данными в профиле
- Массовая регистрация с похожими email-адресами или IP
- Повторяющиеся попытки входа с разных IP
- Комментарии с частыми ссылками или спамом
Для начальной диагностики рекомендую использовать стандартные средства WordPress и плагины типа Clearfy для анализа активности пользователей и очистки сайта от мусора.
Пошаговое решение: удаление и блокировка подозрительных пользователей через код
1. Получение списка подозрительных пользователей по email или роли
function get_suspicious_users() {
$args = [
'role' => 'subscriber', // или другая роль, если нужно
'meta_query' => [
'relation' => 'OR',
[
'key' => 'last_login',
'compare' => 'NOT EXISTS',
],
[
'key' => 'suspicious_flag',
'value' => '1',
'compare' => '=',
],
],
'number' => 100,
];
return get_users($args);
}Здесь мы выбираем пользователей, у которых нет данных о последнем входе или которые помечены как подозрительные.
2. Удаление пользователей по ID
function delete_users_by_ids(array $user_ids) {
foreach ($user_ids as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}3. Блокировка регистрации с подозрительных IP/Email через хук registration_errors
add_filter('registration_errors', function($errors, $sanitized_user_login, $user_email) {
$blocked_domains = ['mailinator.com', 'tempmail.com'];
$email_domain = substr(strrchr($user_email, '@'), 1);
if (in_array($email_domain, $blocked_domains)) {
$errors->add('blocked_email_domain', __('Регистрация с этого почтового домена запрещена.'));
}
return $errors;
}, 10, 3);4. Автоматическое помечание пользователей с подозрительной активностью
add_action('wp_login', function($user_login, $user) {
$suspicious_emails = ['bot@example.com', 'spam@example.com'];
if (in_array($user->user_email, $suspicious_emails)) {
update_user_meta($user->ID, 'suspicious_flag', '1');
}
}, 10, 2);Проверка результата после внедрения
Чтобы убедиться, что подозрительные пользователи удалены и новые регистрации с запрещенных доменов блокируются, выполните следующие действия:
- В админке WordPress перейдите в раздел «Пользователи» и проверьте, что подозрительные аккаунты отсутствуют.
- Попробуйте зарегистрироваться с email на заблокированном домене, чтобы убедиться, что регистрация запрещена.
- Проверьте, что новые подозрительные активности автоматически помечаются, например, через просмотр пользовательских мета-данных.
Частые ошибки и как их исправить
- Ошибка: Пользователи не удаляются.
Причина: Отсутствие подключения файлаwp-admin/includes/user.phpперед вызовомwp_delete_user().
Решение: Добавьтеrequire_once ABSPATH . 'wp-admin/includes/user.php';перед удалением. - Ошибка: Фильтр
registration_errorsне срабатывает.
Причина: Приоритет хука установлен слишком низко или фильтр добавлен после регистрации.
Решение: Добавьте фильтр на самом раннем этапе с приоритетом 10. - Ошибка: Пользователи не помечаются автоматически.
Причина: Хукwp_loginне получает нужных параметров.
Решение: Убедитесь, что функция принимает два аргумента и добавьте приоритет и количество аргументов:add_action('wp_login', 'func', 10, 2);
Практические советы по безопасности и производительности
- Используйте плагины для ограничения количества попыток входа, например, Clearfy, чтобы снизить риск брутфорс-атак.
- Регулярно очищайте базу данных от неактивных и подозрительных пользователей через WP-CLI или автоматизированные скрипты.
- Для массового удаления пользователей лучше использовать WP-CLI, это быстрее и безопаснее, чем через панель администратора.
- Добавляйте мета-данные с флагами подозрительности, чтобы легко фильтровать и управлять такими пользователями.
Сравнение способов удаления и блокировки подозрительных пользователей
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку | Просто, без кода | Медленно, неэффективно при большом количестве |
| Удаление через код (wp_delete_user) | Автоматизация, быстрое удаление | Требует знаний PHP и доступа к файлам |
| Блокировка регистрации через фильтр registration_errors | Прекращает проблемы на входе | Не удаляет уже существующих пользователей |
| Использование плагинов (Clearfy и др.) | Широкий функционал, безопасность | Может нагружать сайт |