Если у вас на сайте есть формы для анонимных пользователей, то рано или поздно вы задумаетесь о том, как защитить их от ботов. Потому, что очищать комментарии или данные в веб формах от спама довольно утомительное занятие. Вы можете заставлять людей решать задачи используя Captcha модуль. Это работает неплохо, но вашим пользователям может не понравится вводить капчу каждый раз, особенно если они вводят сообщения часто.
В качестве бесплатной альтернативы можно использовать Antibot или Honeypot модули. Они работают абсолютно невидимо для пользователей, но, в тоже время, помогают отсекать спам. Давайте разберемся как они работают, чтобы сделать выбор.
Antibot
Antibot модуль работает на основе предположения, что у ботов нет поддержки javascript. В него встроено два способа защиты:
- Antibot заменяет action атрибут у формы на путь
/antibot
. Оригинальный action атрибут сохраняется в атрибуте data-action. Если у пользователя есть поддержка javascript, то data-action копируется обратно в action формы js скриптом. Таким образом бот, у которого js выключен, будет отправлять форму на пустую страницу/antibot
. - Antibot добавляет к форме специальное пустое поле для ключа. Этот ключ он передает через drupalSettings в javascript. Затем скрипт подставляет этот ключ в специальное поле для ключа и валидатор формы проверяет наличие и корректность этого ключа.
В настройках модуля вы можете включить защиту всех форм на сайте или только определенных.
Данный модуль будет защищать форму от простых ботов. Но если бот построен на базе браузерного движка и в нем включена поддержка javascript, то бот будет обходить такой способ защиты.
Honepot
В Honepot встроено два вида защиты, как и в предыдущий модуль:
- Honepot добавляет пустое скрытое текстовое поле в форму. Если валидатор поля увидит, что это поле заполнено, то предполагается, что это сделал бот и такой запрос не пройдет валидацию.
- Скрытое поле с текущим timestamp добавляется в форму. Для проверки используется предположение, что человек не может ввести форму быстрее чем за определенное количество времени. Если форма была отправлена быстрее чем заданный лимит времени, то такая форма не пройдет.
Модуль предоставляет настройки где можно выбрать какие формы должны быть защищены, установить название скрытого поля и лимит времени, которое должно учитываться при вводе формы. Также можно включить логирование отраженных попыток пройти защиту. Есть API для расширения функционала.
Проблемы производительности
К недостаткам этих модулей можно отнести то, что они хоть и решают проблему со спамерскими атаками, но не помогают бороться с нагрузкой, которую создают боты. Мы можем закешировать GET запросы используя прокси и не передавать запросы в Drupal. Но POST запросы, которые создают роботы с помощью форм, обрабатываются Drupal. При высокой активности спамеров это создает большую нагрузку на сервер.
Кешируем Antibot
Antibot модуль устроен таким образом, что все запросы форм от роботов он отправляет на путь /antibot
. Было бы отлично закешировать этот URL, чтобы запросы не передавались в приложение. POST запросы от форм содержат в себе уникальные значения, поэтому нужно убирать все значения, которые передаются на путь /antibot
. Также желательно, чтобы запросы передавались методом GET, чтобы они могли кешироваться прокси со стандартной конфигурацией
Мой коллега, Максим Подоров, предложил интересное решение. Суть в том, что определяется путь /antibot-static
куда перенаправляются пользователи используя GET запрос если у них javascript выключен. Страница /antibot-static
будет кешироваться прокси. Для ботов веб сервер отдаёт 403 ошибку и не пропускает запросы в Drupal.
Что выбрать?
Как мы видим оба решения предоставляют разные способы защиты от ботов. Сложно сказать, какие методы более эффективны. К сожалению нет одного универсального способа защиты, который бы работал одинаково хорошо для разных видов роботов. На самом деле эти модули можно сочетать и использовать их вместе. Также, для дополнительной защиты, можно включить модуль Captcha. Вы можете решить, какие формы на сайте каким образом защищать. Например, формы комментариев защищать с помощью Antibot и/или Honepot, а для формы логина использовать также и Captcha. Или наоборот, или все вместе, в зависимости от вашего сайта и активности ботов.
Ссылки: