Как распознать ботов с php?

Я создаю статистику для своих пользователей и не хочу посещать ботов, чтобы их учитывали.

Теперь у меня есть базовый php с mysql, который увеличивается каждый раз при вызове страницы.

Но боты также добавляются к счету.

Кто-нибудь может подумать об этом?

В основном это просто главные из них. Google, Yahoo, Msn и т. Д.

Вы должны фильтровать строки user-agent. Вы можете найти список из 300 общих пользовательских агентов, заданных ботами здесь: http://www.robotstxt.org/db.html Выполнение этого списка и игнорирование ботов-агентов-пользователей перед запуском SQL-запроса должно решить вашу проблему для всех практических целей.

Если вы не хотите, чтобы поисковые системы даже достигли страницы, используйте основной файл robots.txt, чтобы заблокировать их.

Вы можете проверить строку User Agent, пустые строки или строки, содержащие «робот», «паук», «искатель», «завиток», скорее всего, будут роботами.

preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));

У нас есть аналогичный случай использования, и один из вариантов, который мы недавно нашли весьма полезным, – это класс UASParser из user-agent-string.info .

Это класс PHP, который извлекает последний набор определений строк пользовательского агента и кэширует их локально. Класс может быть настроен так, чтобы вытягивать определения так часто или редко, как вы считаете нужным. Автоматическое получение их, как это означает, что вам не нужно держать в курсе различных изменений ботов пользовательских агентов или новых, поступающих на рынок, хотя вы полагаетесь на UAS.info, чтобы сделать это точно.

Когда класс вызывается, он анализирует пользовательский агент текущего посетителя и возвращает ассоциативный массив, разбивающий составные части, например

 Array ( [typ] => browser [ua_family] => Firefox [ua_name] => Firefox 3.0.8 [ua_url] => http://www.mozilla.org/products/firefox/ [ua_company] => Mozilla Foundation ........ [os_company] => Microsoft Corporation. [os_company_url] => http://www.microsoft.com/ [os_icon] => windowsxp.png ) 

Тип поля устанавливается в browser когда UA идентифицирован как вероятный принадлежащий человеку посетитель, и в этом случае вы можете обновить свою статистику.

Несколько предостережений здесь:

  • Вы полагаетесь на UAS.info для строк пользовательского агента, которые должны быть точными и актуальными
  • Боты, такие как google и yahoo, объявляют себя в своих строках агента пользователя, но этот метод все равно будет считать посещения ботов, притворяющихся человеческими посетителями (отправка поддельных UA)
  • Как упоминалось выше @amdfan , блокирование ботов через robots.txt должно остановить большинство из них до достижения вашей страницы. Если вам нужно индексировать контент, но не увеличивать его, то метод robots.txt не будет реалистичным вариантом

Проверьте агент пользователя перед увеличением количества просмотров страницы, но помните, что это может быть подделано. PHP предоставляет пользовательский агент в $_SERVER['HTTP_USER_AGENT'] , предполагая, что веб-сервер предоставляет ему эту информацию. Более подробную информацию о $_SERVER можно найти по адресу http://www.php.net/manual/en/reserved.variables.server.php .

Список пользовательских агентов можно найти по адресу http://www.user-agents.org ; Googling также предоставит имена тех, кто принадлежит основным провайдерам. Третий возможный источник – это журналы доступа вашего веб-сервера, если вы можете их заполнить.

Вы пытались идентифицировать их по информации своего агента? Простой поиск Google должен предоставить вам пользовательские агенты, используемые Google и т. Д.

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

EDIT: Предполагая, что вы не хотите ограничивать доступ к ботам, но просто не считайте его посещение в своем статистике.