Диагностика проблемы: как понять, что на сайте регистрируются спамеры
Если вы столкнулись с резким ростом подозрительных регистраций в 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, может потребовать поддержки | Оптимальный вариант для опытных разработчиков |