Вопрос или проблема
На моем сайте 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
Ваша текущая конфигурация не эффективна по ряду причин:
-
Метод обращения: Спамеры действительно могут отправлять запросы напрямую, минуя ваш сайт. Ваше условие, основанное на
HTTP_REFERER
, не сработает, так как многие спам-боты могут подменять или игнорировать заголовок Referer. -
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
. Это позволяет авторизованным пользователям оставлять комментарии, в то время как ненадежные источники, вероятно, будут заблокированы.
Дополнительные рекомендации по борьбе со спамом
-
Плагины для защиты от спама: Используйте плагины, такие как Akismet, WP SpamShield или Antispam Bee. Они обеспечивают фильтрацию комментариев на основе различных критериев и могут значительно сократить количество спама.
-
Реализация CAPTCHA: Интеграция CAPTCHA в вашу форму комментариев (например, Google reCAPTCHA) добавляет дополнительный уровень проверки, который поможет отсеять ботов.
-
Скрытые поля: Используйте скрытые поля (honeypot) в вашей форме. Спам-боты не заметят их и автоматически заполнить, в то время как реальные пользователи просто оставят их пустыми.
-
Ограничение по IP или геолокации: Если вы замечаете спам из определенных регионов или IP-адресов, вы можете ограничить доступ к вашим комментариям для этих диапазонов.
-
Модерация комментариев: Настройте комментарии на предварительное одобрение. Это позволяет вам проверять комментарии перед их публикацией.
-
Настройки WordPress: Включите опцию "Авторизованные пользователи могут комментировать" в настройках комментариев WordPress.
Заключение
Хотя спам в комментариях является распространенной проблемой, комплексный подход к ее решению может значительно улучшить вашу защиту. Настройки в .htaccess
— это один из инструментов, но лучший эффект достигается в сочетании с другими методами, такими как использование плагинов и улучшение пользовательского интерфейса для комментирования. Настоятельно рекомендуем тестировать каждое изменение, чтобы найти оптимальное решение для вашего сайта.