Как определить веб-сканер? - PullRequest
31 голосов
/ 06 декабря 2011

Как я могу отфильтровать хиты от веб-сканеров и т. Д. Хиты, которые не принадлежат человеку ..

Я использую maxmind.com, чтобы запросить город с IP-адреса. Это не совсем дешево, если мне придется платитьдля ВСЕХ хитов, включая веб-сканеров, роботов и т. д.

Ответы [ 6 ]

50 голосов
/ 06 декабря 2011

Существует два основных способа обнаружения роботов, и я бы назвал их «Вежливый / Пассивный» и «Агрессивный».По сути, вы должны вызывать у вашего сайта психологические расстройства.

Вежливый

Это способы вежливо сообщить сканерам, что им не следует сканировать ваш сайт, и ограничить частоту сканирования.Вежливость обеспечивается с помощью файла robots.txt , в котором вы указываете, каким ботам, если таковые имеются, должно быть разрешено сканировать ваш сайт и как часто ваш сайт можно сканировать.Это предполагает, что робот, с которым вы имеете дело, вежлив.

Агрессивный

Еще один способ не допустить ботов на ваш сайт - это стать агрессивным.

Пользовательский агент

Некоторое агрессивное поведение включает (как ранее упоминалось другими пользователями) фильтрацию строк пользовательского агента.Это, вероятно, самый простой, но и наименее надежный способ определить, является ли он пользователем или нет.Многие боты имеют тенденцию подделывать пользовательские агенты, а некоторые делают это по законным причинам (то есть они хотят только сканировать мобильный контент), в то время как другие просто не хотят, чтобы их идентифицировали как ботов.Хуже того, некоторые боты обманывают законных / вежливых бот-агентов, таких как пользовательские агенты Google, Microsoft, Lycos и других сканеров, которые обычно считаются вежливыми.Использование агента пользователя может быть полезным, но не само по себе.

Существуют более агрессивные способы работы с роботами, которые подделывают пользовательские агенты и не соблюдают файл robots.txt:

Ловушка для ботов

Мне нравится думать об этом как о «Ловушке с мухой Венеры», и она в основном наказывает любого бота, который хочет поиграть с тобой.

Ловушка для ботов - это, вероятно, самый эффективный способ найти ботов, которые не привязаны к вашему файлу robots.txt, без ущерба для удобства использования вашего веб-сайта.Создание ловушки для ботов обеспечивает захват только ботов, а не реальных пользователей.Основной способ сделать это - установить каталог, который вы специально отметили как запрещенный в вашем файле robots.txt, чтобы любой вежливый робот не попадал в ловушку.Второе, что вы делаете, это помещаете «скрытую» ссылку с вашего сайта в каталог с ловушками для ботов (это гарантирует, что реальные пользователи никогда не пойдут туда, поскольку реальные пользователи никогда не нажимают на невидимые ссылки).Наконец, вы блокируете любой IP-адрес, который идет в каталог ловушки бота.

Вот несколько инструкций о том, как этого добиться: Создать ловушку для бота (или в вашем случае: Ловушка для бота PHP ).

Примечание: конечно, некоторые боты достаточно умны, чтобы читать ваш файл robots.txt, видеть все каталоги, которые вы пометили как «запрещенные», и ВСЕ ЕЩЕ игнорировать ваши настройки вежливости (такие как скорость сканирования и разрешенные боты).Эти боты, вероятно, не попадут в вашу ловушку, несмотря на то, что они не вежливы.

Violent

Я думаю, что это на самом деле слишком агрессивно для широкой аудитории (и общего пользования), так что если есть дети в возрасте до 18 лет, то, пожалуйста, отведите их в другую комнату!

Вы можете сделать ловушку для бота " violent ", просто не указавфайл robots.txt.В этой ситуации ЛЮБОЙ БОТ , который сканирует скрытые ссылки, вероятно, окажется в ловушке для бота, и вы можете запретить всех ботов, точка!

Причина, по которой это не рекомендуется, заключается в том, что вы действительно хотите, чтобы некоторые боты сканировали ваш сайт (например, Google, Microsoft или другие боты для индексации сайта).Если роботы Google, Microsoft, Lycos и т. Д. Будут вежливо сканировать ваш сайт, это обеспечит индексацию вашего сайта, и он будет отображаться, когда люди будут искать его в своей любимой поисковой системе.

Саморазрушительный

Еще один способ ограничить то, что боты могут сканировать на вашем сайте, - это обслуживать CAPTCHA или другие проблемы, которые бот не может решить. Это происходит за счет ваших пользователей, и я думаю, что все, что делает ваш сайт менее пригодным для использования (например, CAPTCHA), является «саморазрушительным». Это, конечно, фактически не будет блокировать бот от повторных попыток сканировать ваш сайт, это просто сделает ваш сайт очень неинтересным для них. Существуют способы «обойти» капчи, но их сложно реализовать, поэтому я не буду вдаваться в подробности.

Заключение

Для ваших целей, вероятно, лучший способ борьбы с ботами - использовать комбинацию из вышеперечисленных стратегий:

  1. Фильтр пользовательских агентов.
  2. Настройка ловушки для ботов (жестокой).

Поймайте всех ботов, попавших в ловушку жестоких ботов, и просто внесите их в черный список (но не блокируйте их). Таким образом, вы все равно получите «выгоду» от сканирования роботами, но вам не придется платить за проверку IP-адресов, занесенных в черный список из-за перехода в ловушку для ботов.

9 голосов
/ 06 декабря 2011

Вы можете проверить USER_AGENT, что-то вроде:

function crawlerDetect($USER_AGENT)
{
    $crawlers = array(
    array('Google', 'Google'),
    array('msnbot', 'MSN'),
    array('Rambler', 'Rambler'),
    array('Yahoo', 'Yahoo'),
    array('AbachoBOT', 'AbachoBOT'),
    array('accoona', 'Accoona'),
    array('AcoiRobot', 'AcoiRobot'),
    array('ASPSeek', 'ASPSeek'),
    array('CrocCrawler', 'CrocCrawler'),
    array('Dumbot', 'Dumbot'),
    array('FAST-WebCrawler', 'FAST-WebCrawler'),
    array('GeonaBot', 'GeonaBot'),
    array('Gigabot', 'Gigabot'),
    array('Lycos', 'Lycos spider'),
    array('MSRBOT', 'MSRBOT'),
    array('Scooter', 'Altavista robot'),
    array('AltaVista', 'Altavista robot'),
    array('IDBot', 'ID-Search Bot'),
    array('eStyle', 'eStyle Bot'),
    array('Scrubby', 'Scrubby robot')
    );

    foreach ($crawlers as $c)
    {
        if (stristr($USER_AGENT, $c[0]))
        {
            return($c[1]);
        }
    }

    return false;
}

// example

$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
7 голосов
/ 06 декабря 2011

Пользовательский агент ($_SERVER['HTTP_USER_AGENT']) часто определяет, является ли агент подключения браузером или роботом. Просмотрите журналы / аналитику для пользовательских агентов сканеров, которые посещают ваш сайт. Фильтруйте соответственно.

Обратите внимание, что пользовательский агент является заголовком, предоставленным клиентским приложением. Таким образом, это может быть что угодно, и не стоит доверять на 100%. Планируйте соответственно.

4 голосов
/ 07 декабря 2011

Проверка User-Agent защитит вас от законных ботов, таких как Google и Yahoo.

Однако, если вас также бьют спам-боты, скорее всего, сравнение User-Agent не защитит вас, так как эти боты обычно в любом случае подделывают общую строку User-Agent. В этом случае вам нужно будет принять более сложные меры. Если требуется ввод пользователя, будет работать простая схема проверки изображений, такая как ReCaptcha или phpMeow.

Если вы хотите отфильтровать все посещения страницы от бота, к сожалению, нет 100% надежного способа сделать это, если бот подделывает свои учетные данные. Это просто досадный факт жизни в интернете, с которым приходится мириться веб-администраторам.

2 голосов
/ 16 июня 2016

Я нашел этот пакет, он активно разрабатывается, и мне он до сих пор нравится:

https://github.com/JayBizzle/Crawler-Detect

Все просто:

use Jaybizzle\CrawlerDetect\CrawlerDetect;

$CrawlerDetect = new CrawlerDetect;

// Check the user agent of the current 'visitor'
if($CrawlerDetect->isCrawler()) {
    // true if crawler user agent detected
}

// Pass a user agent as a string
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
    // true if crawler user agent detected
}

// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();
1 голос
/ 22 мая 2015

useragentstring.com обслуживает последнее время, которое можно использовать для анализа строки пользователя:

$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER['HTTP_USER_AGENT'])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler") die();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...