Вопрос или проблема
Мой сайт на WordPress подвергается нападениям спам-комментариев. Почти все из них содержат действующий URL.
Как я могу автоматически удалять эти комментарии? Я не хочу помещать их в очередь на модерацию; я просто хочу избавиться от них полностью. Мне все равно, если в процессе будут удалены несколько законных комментариев.
Лучший способ – использовать антиспам-плагин, такой как Akismet. Другие плагины капчи также могут быть полезными, просто ищите ключевое слово captcha
в репозитории WordPress.
Если вы хотите сделать это вручную, я могу дать вам подсказку. Прежде всего, вам нужно знать, какой хук действия вам нужен. Я не нашел действия, которое срабатывает до вставки комментария, но comment_post срабатывает после этого.
Затем вам нужно определить, содержит ли текст комментария URL. Этот вопрос на SO может быть полезен в этом. Вы можете удалить комментарий с помощью функции wp_delete_comment.
Вам может понадобиться добавить плагин (или добавить свой собственный фильтр комментариев), чтобы “посчитать” количество URL в комментарии, прежде чем он будет сохранен.
Плагин Akismet хорошо справляется с большим количеством спама. У одного из сайтов, которые я администрировал, была аналогичная проблема. Я в конечном итоге написал плагин, чтобы позволить считать URL (и много других настроек формы комментариев). Он называется “FormSpammerTrap for Comments”. Он довольно эффективен против тех, кто заполняет форму комментария.
Он не так эффективен против тех, кто использует CURL для прямой отправки на страницу wp-comments.php, обходя форму комментария. Я пока не нашел хорошего способа заблокировать это; нет фильтров, которые срабатывают в нужном месте, чтобы заблокировать комментаторов на CURL.
Ответ или решение
Для автоматического удаления комментариев, содержащих URL, на вашем сайте WordPress, существует несколько подходов, которые позволят вам эффективно справиться с вредоносным спамом.
1. Использование антиспам-плагина
Наиболее простым решением является использование антиспам-плагина, такого как Akismet. Этот плагин предназначен для фильтрации спам-комментариев и может автоматически удалять комментарии, содержащие ссылки. Вы также можете рассмотреть возможность использования других плагинов CAPTCHA, чтобы дополнительно защитить вашу форму комментариев.
2. Создание собственного плагина
Если вы хотите настроить процесс удаления комментариев более тщательно, вы можете создать собственный плагин или добавить функциональность к вашему текущему плагину. Для этого вам необходимо использовать хук comment_post
, который срабатывает после того, как комментарий был добавлен.
Вот пример кода, который можно использовать в вашем плагине:
function delete_comments_with_url($comment_ID) {
$comment = get_comment($comment_ID);
$comment_content = $comment->comment_content;
// Проверка на наличие URL в комментарии
if (preg_match('/https?:\/\/[^\s]+/', $comment_content)) {
// Если URL найден, удаляем комментарий
wp_delete_comment($comment_ID, true);
}
}
add_action('comment_post', 'delete_comments_with_url');
Этот код проверяет содержимое комментария на наличие URL и, если он найден, удаляет комментарий из базы данных.
3. Защита от CURL-запросов
Как упоминалось в предыдущих ответах, существует риск получения спама через CURL-запросы, что позволяет злоумышленникам обходить стандартные проверки форм. Чтобы справиться с этим, вы можете использовать дополнительные методы защиты, такие как:
- Использование антиспам-сервисов, которые могут анализировать запросы.
- Внедрение жестких ограничений на частоту отправки комментариев.
- Проверка пользовательского агентства для выявления подозрительных запросов.
4. Регулярные проверки и мониторинг
После внедрения этих методов, регулярно проверяйте свою базу комментариев на наличие спама и корректность работы вашей защиты. Убедитесь, что легитимные комментарии не удаляются без необходимости.
Заключение
Комбинируя инструменты и методы, вы сможете существенно сократить количество спам-комментариев на вашем сайте. С правильной настройкой процесса, вы сможете эффективно удалять комментарии, содержащие URL, минимизируя риск для вашего сайта.