Этот материал о том, как защитить WP от регистраций ботов. Как предотвратить регистрацию спам-аккаунтов на сайте WordPress?
После включения опции, которая разрешает любому желающему зарегистрироваться на сайте (Настройки — Общие) — сайт ожидает наплыв регистраций для спама. После индексации поисковиками страницы wp-login.php количество спама увеличивается многократно. Обычно регистрация пользователей — это необходимое условие для создания форума на сайте под управлением WordPress. Например, популярный плагин BBpress требует свободной регистрации пользователей. Любой популярный сайт должен иметь открытую форму для регистрации настоящих пользователей.
Как происходит рассылка спама на WP сайты?
Спам распространяется при помощи специальных программ вроде Xrumer. Несколько месяцев существования сайта на WP с разрешённой регистрацией пользователей и свободной публикацией комментариев гарантирует то, что база зарегистрированных «пользователей» на сайте разрастётся до 10 тысяч и более записей, а количество спама в комментариях будет стремиться к 100 тысячам. Чем быстрее сайт будет проиндексирован поисковиками, тем больше будет спама на сайте. Спамеры — тоже люди и собирают свои базы из поисковой выдачи. Надо сказать, что комментарий с хорошо индексируемого сайта вероятно имеет хорошую ценность.
У каждого спамера есть своя стратегия. Одни сразу оставляют комментарий, другие — десятки комментариев. Кто-то пытается создать видимость того, что учётная запись принадлежит обычному пользователю и создают множество односложных ответов на существующие комментарии и только спустя какое-то время публикуют комментарии со ссылками. Иногда спамер публикует нормальный комментарий, а спустя какое-то время он изменяет его на сообщение со ссылками. По моему опыту, многие из учётных записей находятся в «состоянии покоя» и до определённого дня не проявляют своей активности, Рано или поздно такой пользователь «напишет» один или множество спам-комментариев со ссылками. На мой взгляд это явление — результат применения какого-то очень популярного «наставления» для начинающих спамеров.
Чем это грозит сайту спам?
- Замедление работы сайта
- Санкции от поисковых систем
- Снижение привлекательности для пользователей
Как защитить сайт на WordPress от регистраций спам-аккаунтов
Программы для спама довольно ограничены и любой шаг в сторону от привычной последовательности действий вызовет коллапс — форма не будет отправлена. В форму надо добавить что-то изысканное и уникальное. Ради того, чтобы «пробить» защиту одного сайта никто не будет переписывать стабильно работающую программу. Я модифицировал форму для регистрации пользователей следующим образом:
Что же видит спамер пользователь при загрузке страницы? Стандартная кнопка submit заблокирована <input ….. disabled /> Для блокировки не нужно присваивать дополнительный класс или переписывать css, достаточно отредактировать форму в самом wp-login.php, строка с кнопкой должна выглядеть как-то так:
1 |
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Register' ); ?>" <? esc_attr_e(' disabled '); ?> /></p> |
Обязательно добавление disabled через такую функцию esc_attr_e(‘ disabled ‘);
Вторая кнопка и информационное сообщение для живых людей добавляются также в wp-login.php:
1 2 3 |
<p id="reg_passmail"><?php _e( 'For unblock Submit you must click on the gray button 6 times! It is fence against spam!' ); ?></p> <input type="button" name="buttonBlock" class="button button-primary2 button-large" id="buttonBlock" value="Unblock Submit"> |
При помощи функции _e() информационное сообщение можно отображать на разных языках.
На этом редактирование стандартной формы в wp-login.php завершено.
Следующий шаг — это подключение файла с .js сценарием. Для этого в functions.php шаблона надо добавить следующие строки:
1 2 3 4 |
function my_theme_scripts() { wp_enqueue_script( 'my-great-script', '/wp_check_reg.js', array( 'jquery' ), '1.0.0', true ); } add_action( 'login_enqueue_scripts', 'my_theme_scripts' ); |
Хук login_enqueue_scripts позволяет добавлять css и js только на login page.
Сценарий на jquery:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
jQuery(document).ready(function($) { var sumBl = 0; $( "#wp-submit" ).prop( "disabled", true ); $("#buttonBlock").click(function() { sumBl +=1; $("#buttonBlock").prop('value', 'Unblock Submit: '+sumBl); console.log(sumBl); if (sumBl < 5) { $( "#wp-submit" ).prop( "disabled", true ); } if (sumBl == 5) { alert("Our Congratulations! Last click and Submit button will unblock!"); } if (sumBl > 5) { $( "#wp-submit" ).prop( "disabled", false ); } if (sumBl == 6) { $("#buttonBlock").hide("slow"); } }); }); |
Суть сценария проста: считаем нажатия на кнопку buttonBlock и отображаем количество нажатий, после 5-го нажатия выводим alert с поздравлением, после 6-го убираем кнопку и разблокируем основной submit.
К форме можно привязать целый квест-головоломку, решение которой доступно только живому человеку, но для отлупа спаму пока достаточно и такого 🙂
Пример сайта с множеством зарегистрированных ботов
Как открытый для свободной регистрации wp-login.php влияет на количество обращений к сайту. Более 90% посещений — это публикация спама через комментарии и регистрация новых пользователей, это будет видно из статистики.
Первый скрин — это посещаемость сайта за 2 первых месяца 2021 года. В феврале посещаемость удвоилась, трафик — утроился.
Второй скрин — это суточная посещаемость. Красным я выделил тот день, когда на форму была установлена защита от спам регистраций и от публикаций комментариев.
Это — первый месяц с установленной защитой. Число визитов снизилось почти в 3 раза, но трафик — вырос почти в 2 раза.
Статистика длительности визитов. 75% проводят на сайте не более 30 секунд. Сделал дело и ушёл.
Самые посещаемые страницы на сайте: wp-login.php, xmlrpc.php и wp-comments-post.php
wp-login.php — абсолютный лидер
Количество заходов на сайт из поисковиков.
Задаюсь вопросом, как бы выглядела статистика сайта через месяц-другой? Очень вероятно, что хостинг не выдержал бы нагрузки и «лёг».
А теперь — немного статистики из самого WP. Надо сказать, что перед тем, как я сделал скриншот, я удалил половину пользователей, поэтому вы видите только 6 тысяч пользователей в БД, а не все 12.
Свежие комментарии