Пара простейших защит от ботов
Расскажем, как защитить сайт от спам-ботов, всего лишь изменив пару строк в вёрстке.
Вот наконец вам сделали сайт ... и онлайновая жизнь зацвела. Менеджеры щёлкают по клавишам, страницы наполняются уникальным контентом, ключевые слова заигрывают с поисковыми роботами, минималистичные формы ввода готовы принять любой фидбек. Всё отлично ... пока в один день сайт заприметят спам-боты.
Бот боту рознь и, разумеется, если сайту начнёт досаждать бот с продвинутой логикой работы или управляемый живым оператором, обойтись простыми средствами защиты скорее всего не получится. Тем не менее множество ботов имеют автоматическую основу, простую логику и останавливаются следующим образом. Вам лишь необходим доступ к html-файлам шаблона (темы, дизайна - как кому нравится называть), где свёрстаны формы ввода.
Развод на капчу
Идея этого способа состоит в том, что бот, найдя на странице форму ввода с признаками капчи (кто впервые слышит - так называют защитный код), пользуется этой формой, только когда определил тип капчи и имеет подходящую функцию "антикапча".
Определение типа капчи выполняется по характерным особенностям в разметке формы. Однако часто достаточно добавить в форму следующий тег, чтобы бот отказался от формы. Мы всего навсего имитируем, будто в нашей форме есть проверка на капчу.
«form ...»
...
«input name="captcha" style="display: none"»
«/form»
Кстати Такой подход бесполезен для ботов, которые постят любую найденную форму наудачу. Тогда рассмотрим ещё один способ.
Где же форма?
Тут идея заключена в укрывании тега формы внутри скриптовой конструкции, которая на самом деле выведет вместо себя требуемый тег, а сам тег не будет виден парсеру бота (парсером называют механизм построчного разбора содержимого страницы). Предположим есть форма:
«form ...» ... ... «/form»
И вот она же с укрытым тегом - открывающим форму и закрывающим:
«script»document.writeln('«' + 'form ...»')«/script» ... ... «script»document.writeln('«' + '/form»')«/script»
Недостаток Форма перестаёт работать, если у посетителя отключен JavaScript в настройках браузера.
Форма в никуда
Предыдущий способ имеет ещё одну, более простую реализацию на единственном скрипте. Здесь мы путаем парсер бота, будто наша форма окончена сразу же и не содержит полей, а за ней будто бы следует полноценная форма (только отошлёт его куда подальше), в то время как в браузере настоящего пользователя фиктивный закрывающий и открывающий теги окажутся внутри комментария.
«form ...» «script»document.writeln('«' + '!--')«/script» «/form» «form action="who-is-who.html"» --» ... ... «/form»
Недостаток Посетитель с отключенным JavaScript отправится по тому же адресу, куда посылали бота. Поэтому страницу "кто есть кто" (в примере мы обозначили её who-is-who.html) нужно делать корректной, чтобы не обругать живого человека. Кроме того, следует учесть, что поисковый робот парсит страницу подобно боту, и значит тоже увидит "две" формы, из которых узнает о наличии на вашем сайте чудесной страницы. Логично будет закрыть от индексации такой адрес.