Использование htaccess для предотвращения спама через wp-comments-post.php

Вопрос или проблема

На моем сайте WordPress публикуется много спам-комментариев. Они публикуются с помощью файла wp-comments-post.php. Я вижу это из логов:

"POST /wp/wp-comments-post.php HTTP/1.0" 302 3744 "https://example.com/wp/link/" "Mozilla/5.0 (Windows NT 6.1; WOW64)

У меня уже есть это в файле .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]

Это, похоже, не предотвращает это. Есть ли что-то неправильное в приведенном выше коде?

На мой взгляд, это не остановит спамера.

Спамеры даже не используют вашу форму комментариев. Они «скребут» форму (возможно, это не обязательно) и «публикуют» через процесс CURL, который отправляет поля формы. Им даже не нужно посещать ваш сайт – для публикации комментария им нужен только ID поста. И его можно легко угадать или «скрестить» – им просто нужно «запросить» вашу страницу и взять первое значение ID поста, которое они найдут. Или использовать случайное число.

Таким образом, поиск действительного доступа к странице поста как способ блокировки спамеров не сработает для автоматизированных ботов, которые спамят вашу форму комментариев.

Основной код ‘wp-comments-post.php’ не ‘построен’ для того, чтобы вы могли перехватывать любые попытки спам-ботов отправить вам спам-комментарии. Недостаток в основном коде, на мой взгляд.

Единственный способ, который немного эффективен, это включить Akismet для определения кода комментариев. Но даже это неэффективно.

Я создал код, который можно использовать для контактных форм, который эффективно блокирует спам-ботов (смотрите https://www.FormSpammerTrap.com – это бесплатно). Но я не нашел способа эффективно блокировать ботов спама комментариев от прямой публикации в wp-comments-post.php. Это потребовало бы переписывания этого основного файла с заменой. А затем вам нужно было бы заблокировать прямой доступ к wp-comments-post.php.

Таким образом, моим единственным вариантом было включить Akismet, позволить ему удалять весь спам, который он находит. Но это не совсем эффективно.

Это не полный ответ на ваш вопрос. Но я не знаю ни одного процесса, который полностью заблокирует спам комментариев на основе ботов. (Даже изменение htaccess для поиска страницы референта не поможет — спам-боты просто «подделают» значение страницы референта в своем POST.)

Ответ или решение

Для борьбы со спамом в комментариях вашего сайта на WordPress, особенно через файл wp-comments-post.php, многие администраторы пытаются использовать файл настройки .htaccess. Давайте рассмотрим, как именно можно улучшить вашу текущую конфигурацию, а также какие дополнительные меры можно предпринять для более эффективной защиты.

Проблема с текущей конфигурацией .htaccess

Ваша текущая конфигурация не эффективна по ряду причин:

  1. Метод обращения: Спамеры действительно могут отправлять запросы напрямую, минуя ваш сайт. Ваше условие, основанное на HTTP_REFERER, не сработает, так как многие спам-боты могут подменять или игнорировать заголовок Referer.

  2. User-Agent: Проверка на наличие HTTP_USER_AGENT также неэффективна, так как боты могут легко подделать этот заголовок.

Ваш правила .htaccess на данный момент не являются надежной защитой и должны быть доработаны.

Рекомендованная конфигурация .htaccess

Вот улучшенная версия правил, которую вы можете использовать в файле .htaccess для блокировки доступа к wp-comments-post.php:

RewriteEngine On

# Блокировать доступ к wp-comments-post.php для всех, кроме авторизованных пользователей
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} /wp-comments-post\.php [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule ^wp-comments-post\.php - [F,L]

# Альтернативный подход: ограничение по IP адресу (если у вас есть известные IP адреса спамеров)
# RewriteCond %{REMOTE_ADDR} ^123\.456\.789\.000
# RewriteRule ^wp-comments-post\.php - [F,L]

В этом примере мы блокируем доступ к wp-comments-post.php для всех запросов POST, которые не содержатCookie wordpress_logged_in. Это позволяет авторизованным пользователям оставлять комментарии, в то время как ненадежные источники, вероятно, будут заблокированы.

Дополнительные рекомендации по борьбе со спамом

  1. Плагины для защиты от спама: Используйте плагины, такие как Akismet, WP SpamShield или Antispam Bee. Они обеспечивают фильтрацию комментариев на основе различных критериев и могут значительно сократить количество спама.

  2. Реализация CAPTCHA: Интеграция CAPTCHA в вашу форму комментариев (например, Google reCAPTCHA) добавляет дополнительный уровень проверки, который поможет отсеять ботов.

  3. Скрытые поля: Используйте скрытые поля (honeypot) в вашей форме. Спам-боты не заметят их и автоматически заполнить, в то время как реальные пользователи просто оставят их пустыми.

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

  5. Модерация комментариев: Настройте комментарии на предварительное одобрение. Это позволяет вам проверять комментарии перед их публикацией.

  6. Настройки WordPress: Включите опцию "Авторизованные пользователи могут комментировать" в настройках комментариев WordPress.

Заключение

Хотя спам в комментариях является распространенной проблемой, комплексный подход к ее решению может значительно улучшить вашу защиту. Настройки в .htaccess — это один из инструментов, но лучший эффект достигается в сочетании с другими методами, такими как использование плагинов и улучшение пользовательского интерфейса для комментирования. Настоятельно рекомендуем тестировать каждое изменение, чтобы найти оптимальное решение для вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...