Php проверка на бота

PHP скрипт для определения поисковых ботов

Самый простой способ отличить поисковых ботов от ддос-ботов — по User Agent.

Простейший скрипт для определения ботов поисковиков.

function isSearchBot() < $bots = array('Google','Yandex','mail.ru','Rambler','yahoo.com','msn.com','bing.com'); // Посмотрите статистику и уберите ненужные вам поисковые системы, это уменьшит нагрузку foreach($bots as $b) < if( strpos($_SERVER['HTTP_USER_AGENT'], $b) == true ) return $b; >return false; >

Но ддос боты могут выдавать себя за поисковых ботов, если ддосер поймет, что поискового бота вы определяете только по User Agent. Тогда нам поможет php-функция gethostbyaddr.

С проверкой Рамблер и Yahoo ботов есть проблемы, поэтому их убрал.

function isSearchBot() < $bots = array('Google'=>array('.googlebot.com', '.google.com'), 'Yandex'=>array('.yandex.com', '.yandex.ru', '.yandex.net'), 'mail.ru'=>array('.mail.ru'), 'msn.com'=>array('.msn.com'), 'bing.com'=>array('.msn.com')); foreach($bots as $u=>$h) < if( strpos($_SERVER['HTTP_USER_AGENT'], $u) == true ) < $iphost=gethostbyaddr($_SERVER['REMOTE_ADDR']); foreach($h as $host) < if (substr($iphost, -strlen($host) )==$host) return true; >return 'фейковый бот'; > > return 'не бот'; >

Функция gethostbyaddr медленная, поэтому нам нужно будет сохранять результат проверки. Рекомендую создавать файлы с именем ip адреса для «хороших» и «плохих» ботов. Например, так.

if (!file_exists('search/'.$_SERVER['REMOTE_ADDR'])) < $isbot= isSearchBot(); // Проверяем на бота file_put_contents('search/'.$_SERVER['REMOTE_ADDR'], $isbot); // Записываем результат >else $isbot=file_get_contents('search/'.$_SERVER['REMOTE_ADDR']);

Вы можете сделать для хороших и плохих ботов разные папки, в общем принцип понятен.

Акуальный список User Agent ботов Яндекса смотрите здесь.
Акуальный список User Agent ботов Гугла смотрите здесь.

Примеры User Agent других поисковых ботов.

Mail.ru Mozilla/5.0 (compatible; Mail.RU_Bot/Fast/2.0) Rambler StackRambler/2.0 (MSIE incompatible) StackRambler/2.0 Yahoo Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) MSN msnbot/1.1 (+http://search.msn.com/msnbot.htm) msnbot-media/1.0 (+http://search.msn.com/msnbot.htm) msnbot-media/1.1 (+http://search.msn.com/msnbot.htm) msnbot-news (+http://search.msn.com/msnbot.htm) Bing Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

Источник

Как определить, что посетитель вашего сайта поисковый робот, а не человек на PHP?

Почти каждое устройство в сети Интернет при посещении того или иного сайта посылает так называемых «User Agent», некую информацию в виде названия операционной системы, языка, браузера и прочих параметров.

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

Для такого определения мы воспользуемся PHP и готовой для него функцией определения популярных поисковых (и не только) ботов.

Сама функция выглядит так:

 function isBot() { if(!isset($_SERVER['HTTP_USER_AGENT'])) { $_SERVER['HTTP_USER_AGENT'] = ''; > $bots = [ 'Google', 'Yandex', 'Baiduspider', 'Lycos', 'Genieo', 'Slurp', 'WebAlta', 'facebook', 'Mail.Ru', 'ia_archiver', 'Teoma', 'Yahoo', 'Ask', 'Rambler', 'crawler4j', 'MJ12', 'Seznam', 'Bot', 'cURL', 'DuckDuckGo', 'AOL', 'Lighthouse' ]; foreach($bots as $bot) { if(stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) { return $bot; > > return false; >

И вот пример ее использования:

 if(isBot()) { // Условие, если это бот // Выполняем действие или выводим имя бота через echo isBot(); >

Функция содержит в себе идентификаторы всех популярных поисковых роботов. По желанию вы можете дополнить их своим списком или, например, ограничиться только определенными ботами.

Хочется отметить, что этот вариант определения поисковых роботов не дает 100% точности, так как заголовок (User Agent) можно подменить.

Источник

Как определить поискового робота на PHP

Как определить поискового робота на PHP

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

function isBot() < $bots = array( 'rambler','googlebot','aport','yahoo','msnbot','turtle','mail.ru','omsktele', 'yetibot','picsearch','sape.bot','sape_context','gigabot','snapbot','alexa.com', 'megadownload.net','askpeter.info','igde.ru','ask.com','qwartabot','yanga.co.uk', 'scoutjet','similarpages','oozbot','shrinktheweb.com','aboutusbot','followsite.com', 'dataparksearch','google-sitemaps','appEngine-google','feedfetcher-google', 'liveinternet.ru','xml-sitemaps.com','agama','metadatalabs.com','h1.hrn.ru', 'googlealert.com','seo-rus.com','yaDirectBot','yandeG','yandex', 'yandexSomething','Copyscape.com','AdsBot-Google','domaintools.com', 'Nigma.ru','bing.com','dotnetdotcom'); foreach($bots as $bot) if(stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false)< return true; >return false; >
А ещё по теме

Файл конфигурации Httpd.conf

Файл конфигурации Httpd.conf

Httpd.conf – главный файл конфигурации сервера Apache, содержащий директивы, которые управляют работой сервера. Различают несколько…

Жесткие и символические ссылки

Жесткие и символические ссылки

Символические ссылки В системах Unix иногда возникает необходимость иметь для файла или каталога разные имена.…

Источник

Читайте также:  Цикл до тех пор пока python
Оцените статью