Диагностика проблемы с регистрацией поддельных пользователей
Если на вашем сайте WordPress появилось много спам-аккаунтов или поддельных регистраций, это может негативно сказаться на безопасности, производительности и репутации ресурса. Признаки проблемы:
- Большое количество новых пользователей с подозрительными email (например, временные почты);
- Пользователи с одинаковыми или похожими именами;
- Неожиданные всплески активности регистрации;
- Увеличение нагрузки на сервер без видимой причины.
Для подтверждения можно выгрузить список пользователей из админки или через базу данных:
SELECT ID, user_login, user_email, user_registered FROM wp_users ORDER BY user_registered DESC LIMIT 50;Обратите внимание на подозрительные email и даты регистрации.
Пошаговое решение: удаление и блокировка поддельных регистраций
1. Удаление поддельных пользователей через код
Для удаления пользователей по определенному условию используйте следующий код. Например, удалим пользователей с email, содержащим "tempmail" (часто используется в спаме):
function delete_spam_users_by_email_part( $email_part ) {
$args = [
'search' => '*'.esc_attr( $email_part ).'*',
'search_columns' => ['user_email'],
'fields' => 'ID'
];
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user_id ) {
require_once( ABSPATH.'wp-admin/includes/user.php' );
wp_delete_user( $user_id );
}
}
}
delete_spam_users_by_email_part('tempmail');Подставьте в вызов функции часть email или имя, которые встречаются в спам-аккаунтах.
2. Блокировка регистрации поддельных пользователей
Чтобы предотвратить регистрацию спам-аккаунтов, рекомендуем реализовать несколько уровней защиты:
- Подключить рекапчу (Google reCAPTCHA v2/v3) на форму регистрации;
- Добавить проверку email на временные почтовые сервисы;
- Отключить регистрацию или ограничить её по домену email;
- Использовать фильтры для проверки данных при регистрации.
Пример фильтра для блокировки временных почтовых сервисов на этапе регистрации:
add_action( 'registration_errors', 'block_temp_email_registration', 10, 3 );
function block_temp_email_registration( $errors, $sanitized_user_login, $user_email ) {
$temp_domains = [ 'tempmail.com', 'mailinator.com', '10minutemail.com' ];
$email_domain = substr( strrchr( $user_email, '@' ), 1 );
if ( in_array( $email_domain, $temp_domains, true ) ) {
$errors->add( 'temp_email_blocked', __( 'Регистрация с временных почтовых сервисов запрещена.' ) );
}
return $errors;
}3. Внедрение Google reCAPTCHA v2 на форму регистрации
Добавьте в форму регистрации поле reCAPTCHA и проверьте ответ на сервере. Пример упрощенной проверки:
function verify_recaptcha_on_registration() {
if ( isset( $_POST['g-recaptcha-response'] ) ) {
$response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => 'ВАШ_SECRET_KEY',
'response' => sanitize_text_field( $_POST['g-recaptcha-response'] ),
'remoteip' => $_SERVER['REMOTE_ADDR']
]
] );
$response_body = wp_remote_retrieve_body( $response );
$result = json_decode( $response_body, true );
if ( empty( $result['success'] ) || ! $result['success'] ) {
wp_die( 'Ошибка проверки reCAPTCHA. Попробуйте снова.' );
}
} else {
wp_die( 'Пожалуйста, подтвердите, что вы не робот.' );
}
}
add_action( 'register_post', 'verify_recaptcha_on_registration', 10, 3 );Проверка результата после внедрения
После выполнения удаления и добавления защиты:
- Перейдите в «Пользователи» в админке, проверьте, что спам-аккаунты удалены;
- Попробуйте зарегистрироваться с временным email — регистрация должна быть заблокирована;
- Проверьте работу reCAPTCHA на форме регистрации;
- Мониторьте логи сервера и базу данных на предмет новых подозрительных регистраций.
Частые ошибки и как их исправить
- Ошибка: Удаление пользователей не происходит — причина в отсутствии прав или неправильном ID.
Решение: Убедитесь, что код запускается с правами администратора и что WP_User_Query возвращает корректные ID. - Ошибка: reCAPTCHA не проверяется или форма не блокируется.
Решение: Проверьте правильность secret key и наличие поляg-recaptcha-responseв форме. - Ошибка: Регистрация продолжается с временными почтовыми доменами.
Решение: Добавьте в массив$temp_domainsактуальные почтовые сервисы, используемые спамерами.
Практические советы по безопасности и производительности
- Регулярно обновляйте список временных почтовых доменов для фильтрации.
- Используйте плагин Clearfy Pro для удаления лишних REST API эндпоинтов и оптимизации работы сайта.
- Ограничьте количество попыток регистрации с одного IP — используйте плагин Limit Login Attempts Reloaded.
- Периодически делайте аудит пользователей и удаляйте неактивные аккаунты.
Сравнение способов блокировки спам-регистраций
| Метод | Плюсы | Минусы | Пример реализации |
|---|---|---|---|
| Фильтр email-доменов | Простота, быстрое внедрение | Требует обновления списка доменов | Хук registration_errors + проверка домена |
| Google reCAPTCHA | Высокая эффективность, защита от ботов | Зависимость от стороннего сервиса, требует настройки | Добавление поля в форму + серверная проверка |
| Ограничение по IP | Дополнительный уровень защиты | Может блокировать легитимных пользователей | Плагины Limit Login Attempts |