Как определить веб-искателя?

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

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

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

любезный

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

агрессивный

Другой способ удержать ботов с вашего сайта – это получить агрессивность.

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

Некоторое агрессивное поведение включает (как ранее упоминалось другими пользователями) фильтрацию строк пользовательского агента. Это, вероятно, самый простой, но и наименее надежный способ определить, является ли он пользователем или нет. Многие боты, как правило, обманывают пользовательские агенты, а некоторые делают это по законным причинам (т. Е. Хотят только обходить мобильный контент), в то время как другие просто не хотят быть идентифицированными как боты. Хуже того, некоторые боты обманывают законных / вежливых агентов бота, таких как пользовательские агенты google, microsoft, lycos и других сканеров, которые обычно считаются вежливыми. Опора на пользовательский агент может быть полезна, но не сама по себе.

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

Бот Ловушка

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

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

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

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

насильственный

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

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

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

Саморазрушающий

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

Вывод

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

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

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

Вы можете проверить 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']); 

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

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

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

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

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

Я нашел этот пакет, он активно развивается, и мне это очень нравится:

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(); 

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

 $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();