Спам-комментарии — одна из главных проблем для владельцев сайтов на WordPress. Они не только засоряют базу данных, но и могут повлиять на SEO и репутацию ресурса. В этой статье разберём, как эффективно отфильтровывать и автоматически удалять спам-комментарии по IP-адресам и User-Agent, используя собственные функции и готовые плагины.
Почему важно фильтровать спам по IP и User-Agent
Многие спам-боты используют одинаковые IP-адреса или характерные строки User-Agent, что позволяет отлавливать их с помощью фильтров. Эта методика позволяет:
- Уменьшить нагрузку на сервер, блокируя спам ещё на этапе отправки комментария.
- Снизить количество мусорных записей в базе данных.
- Повысить качество комментариев и улучшить поведенческие факторы сайта.
Основные методы фильтрации спам-комментариев в WordPress
1. Использование штатных возможностей WordPress
WordPress позволяет в админке указать список заблокированных IP-адресов и User-Agent. Для этого перейдите в Настройки > Обсуждение и в поле Чёрный список комментариев добавьте IP или части User-Agent. Однако этот метод требует ручного обновления и не масштабируется при большом количестве спама.
2. Использование готовых плагинов
Рассмотрим несколько популярных плагинов для фильтрации и удаления спама по IP и User-Agent:
- WPSpamShield Anti-Spam — комплексное решение, которое блокирует спам без капчи и сложных настроек. Есть возможность вести чёрные списки IP и User-Agent.
- Antispam Bee — бесплатный плагин, умеет фильтровать комментарии по IP, User-Agent, языку и другим параметрам.
- Clearfy Pro с модулем антиспама — позволяет настраивать фильтрацию по IP и User-Agent напрямую из админки, а также автоматически удалять спам.
Все эти плагины можно найти на WPSHOP.RU с удобной покупкой и поддержкой.
Как написать собственный фильтр спам-комментариев по IP и User-Agent
Если нужно гибко управлять фильтрацией, лучше написать свой код. Ниже пример функции для файла functions.php вашей темы или плагина, которая блокирует комментарии с определённых IP и User-Agent.
function wpclass_filter_spam_comments( $approved , $commentdata ) {
$blocked_ips = [
'123.45.67.89', // пример IP
'111.222.333.444'
];
$blocked_agents = [
'SpamBot',
'BadUserAgent',
];
$comment_ip = $commentdata['comment_author_IP'];
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
// Проверяем IP
if ( in_array( $comment_ip, $blocked_ips ) ) {
return 'spam'; // помечаем как спам
}
// Проверяем User-Agent
foreach ( $blocked_agents as $agent ) {
if ( stripos( $user_agent, $agent ) !== false ) {
return 'spam';
}
}
return $approved;
}
add_filter( 'pre_comment_approved', 'wpclass_filter_spam_comments', 10, 2 );В этом коде мы создаём два массива — заблокированные IP и User-Agent. Функция проверяет входящий комментарий, и если IP или User-Agent совпадает с чёрным списком, комментарий автоматически помечается как спам.
Расширение фильтра: блокировка по диапазону IP
Иногда спам приходит с целых подсетей. Для блокировки диапазона можно использовать функцию проверки по маске:
function wpclass_ip_in_range($ip, $range) {
if ( strpos($range, '/') == false ) {
return $ip === $range;
} else {
list($range, $netmask) = explode('/', $range, 2);
$ip_net = ip2long($ip) & ~((1 << (32 - $netmask)) - 1);
$range_net = ip2long($range) & ~((1 << (32 - $netmask)) - 1);
return $ip_net == $range_net;
}
}Её можно интегрировать в основной фильтр, чтобы блокировать не только конкретные IP, но и целые подсети.
Автоматическое удаление старого спама по IP и User-Agent из базы
Если база комментариев уже засорена спамом, можно автоматизировать удаление. Пример кода для удаления всех спам-комментариев с указанным IP или User-Agent:
function wpclass_delete_spam_comments_by_ip_agent() {
global $wpdb;
$blocked_ips = ['123.45.67.89', '111.222.333.444'];
$blocked_agents = ['SpamBot', 'BadUserAgent'];
foreach ($blocked_ips as $ip) {
$wpdb->query( $wpdb->prepare(
"DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_author_IP = %s",
$ip
) );
}
foreach ($blocked_agents as $agent) {
$wpdb->query( $wpdb->prepare(
"DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_agent LIKE %s",
"%" . $wpdb->esc_like($agent) . "%"
) );
}
}
// Запускать вручную или через WPClass Cron
// wpclass_delete_spam_comments_by_ip_agent();Для регулярного запуска этой функции можно использовать планировщик задач WPClass Cron, о котором мы писали в нашем руководстве.
Рекомендации по работе с фильтрами и плагинами
При использовании фильтров и плагинов для блокировки спама по IP и User-Agent учитывайте:
- Регулярно обновляйте списки заблокированных IP и User-Agent, добавляя новые данные из логов и аналитики.
- Не блокируйте слишком широко — это может привести к ошибочному удалению легитимных комментариев.
- Используйте плагины с хорошей репутацией и поддержкой, чтобы избежать конфликтов и уязвимостей.
- Периодически очищайте базу от старого спама, чтобы не засорять её и не замедлять работу сайта.
Заключение
Фильтрация спам-комментариев по IP и User-Agent — эффективный способ защитить сайт от мусора и снизить нагрузку на сервер. Используйте комбинацию штатных возможностей, надёжных плагинов и собственных функций для максимального результата. Внедрение таких решений позволит поддерживать чистоту комментариев и улучшить качество взаимодействия с посетителями.