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

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

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

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

кто-нибудь может придумать способ?

в основном это только основные, которые все портят. Google, Yahoo, Msn и т. д.

5 ответов


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

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


вы можете проверить строку агента пользователя, пустые строки или строки, содержащие "robot", "spider", "crawler", "curl", скорее всего, будут роботами.

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


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

это класс PHP, который извлекает последний набор определений строк пользовательского агента и кэширует их локально. Класс может быть настроен для извлечения определений так часто или так редко, как вы считаете нужным. Автоматическая выборка их, как это означает, что вам не нужно держать на вершине различных изменений в bot пользовательские агенты или новые приходят на рынок, хотя вы полагаетесь на 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
)

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

пару моментов здесь:

  • вы полагаетесь на UAS.info чтобы строки агента пользователя были точными и актуальными
  • боты, такие как google и yahoo, объявляют себя в своих строках агента пользователя, но этот метод все равно будет считать посещения ботов, притворяющихся посетителями человека (отправка поддельных UAs)
  • As @amdfan упоминалось выше, блокируя ботов с помощью роботов.txt должен остановить большинство из них от достижения вашей страницы. Если вам нужно содержание, чтобы быть индексируется, но не увеличивается статистика, затем роботы.метод 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: предполагая, что вы не хотите ограничивать доступ ботов, но просто не учитываете его посещение в вашем statistc.