WooCommerce: как запретить регистрацию спамеров без плагинов

Диагностика проблемы: как понять, что на сайте регистрируются спамеры

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

Основные признаки спам-регистраций в WooCommerce:

  • Множество новых пользователей с одинаковыми или похожими email-адресами (например, с доменов временных почтовых сервисов).
  • Неестественный всплеск регистраций в короткий промежуток времени.
  • Пустые или бессмысленные данные в профилях пользователей.
  • Повторяющиеся IP-адреса или прокси.

Для подтверждения проблемы рекомендую выполнить SQL-запрос к базе данных, чтобы отфильтровать пользователей с подозрительными email:

SELECT user_email, COUNT(*) as count FROM wp_users WHERE user_email LIKE '%@mailinator.com' OR user_email LIKE '%@tempmail%' GROUP BY user_email HAVING count > 1;

Если запрос возвращает результаты, значит спамеры используют временные почтовые сервисы.

Шаги по решению: запрет регистрации спамеров в WooCommerce без плагинов

1. Добавляем проверку email при регистрации

Пропишем фильтр для проверки email при регистрации, чтобы блокировать временные почтовые домены и подозрительные адреса.

add_filter('woocommerce_registration_errors', 'wptricks_block_spam_email_domains', 10, 3); 
function wptricks_block_spam_email_domains($errors, $username, $email) {
    $blocked_domains = array(
        'mailinator.com',
        'tempmail.net',
        '10minutemail.com',
        'dispostable.com',
        'guerrillamail.com'
    );
    $email_domain = strtolower(substr(strrchr($email, '@'), 1));
    if (in_array($email_domain, $blocked_domains)) {
        $errors->add('registration-error', __('Ошибка: регистрация с временных почтовых адресов запрещена.', 'woocommerce'));
    }
    return $errors;
}

2. Ограничиваем массовые регистрации с одного IP

Добавим проверку, чтобы с одного IP нельзя было создать более 3 аккаунтов за сутки:

add_filter('woocommerce_registration_errors', 'wptricks_limit_registrations_per_ip', 20, 3);
function wptricks_limit_registrations_per_ip($errors, $username, $email) {
    global $wpdb;
    $ip = $_SERVER['REMOTE_ADDR'];
    $date_limit = date('Y-m-d H:i:s', strtotime('-1 day'));
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT user_id FROM {$wpdb->prefix}usermeta WHERE meta_key = 'registration_ip' AND meta_value = %s",
        $ip
    ));
    $count = 0;
    if ($user_ids) {
        foreach ($user_ids as $user_id) {
            $user = get_userdata($user_id);
            if ($user && strtotime($user->user_registered) > strtotime($date_limit)) {
                $count++;
            }
        }
    }
    if ($count >= 3) {
        $errors->add('registration-error', __('Ошибка: с одного IP можно зарегистрировать не более 3 аккаунтов в сутки.', 'woocommerce'));
    }
    return $errors;
}

add_action('user_register', 'wptricks_save_registration_ip');
function wptricks_save_registration_ip($user_id) {
    if (!empty($_SERVER['REMOTE_ADDR'])) {
        update_user_meta($user_id, 'registration_ip', $_SERVER['REMOTE_ADDR']);
    }
}

3. Добавляем скрытое поле honeypot в форму регистрации

Спам-боты часто заполняют все поля формы. Добавим скрытое поле, которое должен оставить пустым только реальный пользователь.

add_action('woocommerce_register_form', 'wptricks_add_honeypot_field');
function wptricks_add_honeypot_field() {
    echo '<p class="form-row wptricks-honeypot" style="display:none;"><label for="wptricks_hp">Не заполняйте это поле</label><input type="text" name="wptricks_hp" id="wptricks_hp" value="" /></p>';
}

add_filter('woocommerce_registration_errors', 'wptricks_check_honeypot_field', 15, 3);
function wptricks_check_honeypot_field($errors, $username, $email) {
    if (!empty($_POST['wptricks_hp'])) {
        $errors->add('registration-error', __('Ошибка: подозрительная регистрация.', 'woocommerce'));
    }
    return $errors;
}

Проверка результата после внедрения

Чтобы убедиться, что меры работают:

  • Попробуйте зарегистрироваться с имейлом с временного почтового домена — должно появиться сообщение об ошибке.
  • С одного IP попытайтесь зарегистрировать больше 3 аккаунтов за короткий промежуток — последующие регистрации должны блокироваться.
  • Заполните скрытое поле honeypot при регистрации — регистрация отклонится.

Также отслеживайте новых пользователей в админке и анализируйте логи сервера на предмет подозрительной активности.

Частые ошибки и как их исправить

  • Не работает блокировка email: проверьте, что фильтр woocommerce_registration_errors добавлен правильно и приоритеты не конфликтуют с другими плагинами.
  • IP не сохраняется для проверки: убедитесь, что user_register хук вызывается и функция update_user_meta работает без ошибок.
  • Honeypot не виден пользователю: это нормально, поле должно быть скрытым стилем display:none;. Если поле видно, проверьте CSS темы.
  • Конфликты с другими плагинами регистрации: временно отключите сторонние плагины, чтобы проверить, не мешают ли они работе кастомного кода.

Практические советы по безопасности и производительности

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

Сравнение подходов: плагин vs кастомный код

МетодПлюсыМинусыКомпромисс
Плагины антиспама (например, Stop Spammers)Готовое решение, много функций, быстрое подключениеНагрузка на сайт, возможные конфликты, платные версииИспользовать для небольших сайтов, если не умеете писать код
Кастомный код (хуки, фильтры)Гибкость, минимум нагрузки, полное понимание логикиТребует знаний PHP, может потребовать поддержкиОптимальный вариант для опытных разработчиков
WooCommerce: автоматическое изменение стоимости товаров по условиям на разных страницах
18.07.2026
WooCommerce: отключение отзывов только для незарегистрированных пользователей
30.04.2026
WooCommerce: оформление заказа без перезагрузки страницы
13.05.2026
WooCommerce: автоматическое изменение стоимости товаров по условиям
24.05.2026
Как создать запросы в WordPress на основе мета данных
22.02.2026