Отличать ботов от посетителей-людей для получения статистики?

StackOverflow https://stackoverflow.com/questions/1717049

Вопрос

Я хочу запустить свой собственный простой скрипт веб-статистики.

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

Есть ли какой-нибудь открытый сервис, который делает это, как Akismet делает со спамом?Или есть PHP-проект, который посвящен распознаванию пауков и ботов и предоставляет частые обновления?

Чтобы прояснить: Я не собираюсь блокировать ботов. Мне не нужны 100% водонепроницаемые результаты.Я просто хочу исключить из своей статистики как можно больше людей.В знайте, что синтаксический анализ пользовательского агента - это вариант, но поддержание шаблонов для синтаксического анализа требует большой работы.Мой вопрос в том, существует ли какой-либо проект или служба, которые уже делают это .

Щедрость: Я подумал, что задам этот вопрос в качестве справочного по теме.Сумма вознаграждения будет присуждена за лучший / самый оригинальный / наиболее технически осуществимый вклад.

Это было полезно?

Решение

Люди и боты будут делать похожие вещи, но боты будут делать то, чего не делают люди.Давайте попробуем определить эти вещи.Прежде чем мы рассмотрим поведение, давайте примем РайКуанг прокомментируйте, если это полезно.Если у посетителя есть строка user-agent бота, скорее всего, это бот.Я не могу представить, чтобы кто-то ходил с "Google Crawler" (или чем-то подобным) в качестве UA, если только они не работают над тем, чтобы что-то сломать.Я знаю, что вы не хотите обновлять список вручную, но автоматическое извлечение этого списка должно быть полезным, и даже если он останется устаревшим в течение следующих 10 лет, это будет полезно.

Некоторые уже упоминали Javascript и загрузку изображений, но Google сделает и то, и другое.Мы должны предположить, что теперь есть несколько ботов, которые будут делать и то, и другое, так что это уже не человеческие показатели.Однако единственное, что боты по-прежнему будут делать, - это переходить по "невидимой" ссылке.Ссылка на страницу очень скрытым способом, который я не могу видеть как пользователь.Если за этим последуют, значит, у нас есть бот.

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

Итак, чтобы использовать все это:ведите таблицу базы данных ботов по IP-адресам, возможно, с ограничениями по временным меткам.Добавьте все, что следует по вашей невидимой ссылке, добавьте все, что загружает "настоящий" CSS, но игнорирует robots.txt CSS.Возможно, также добавьте все загрузчики robots.txt.Отфильтруйте строку user-agent в качестве последнего шага и подумайте о том, чтобы использовать это для быстрого анализа статистики и посмотреть, насколько эффективно эти методы работают для идентификации объектов, которые, как мы знаем, являются ботами.

Другие советы

Самый простой способ - проверить, включает ли их пользовательский агент "бота" или "паука". Большинство так и делает.

РЕДАКТИРОВАТЬ (10 лет спустя): Как сказал Лукас в поле для комментариев, почти все сканеры сегодня поддерживают javascript, поэтому я удалил абзац, в котором говорилось, что если бы сайт был основан на JS, большинство ботов были бы автоматически удалены.

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

Взгляните на этот список ботов.

Это список пользовательских агентов это тоже довольно хорошо.Просто вычеркните все буквы "Б" и все готово.

Редактировать: Потрясающая работа, проделанная эСнифф имеет приведенный выше список здесь "в форме, которую проще запрашивать и анализировать.robotstxt.org/db/all.txt Каждый новый Бот определяется по идентификатору робота:XXX.Вы должны иметь возможность загружать его раз в неделю и преобразовывать во что-то, что может использовать ваш скрипт" как вы можете прочитать в его комментарии.

Надеюсь, это поможет!

Рассмотрим скрипт статистики PHP, который замаскирован под фоновое изображение CSS (укажите правильные заголовки ответа - по крайней мере, тип содержимого и элемент управления кэшем -, но выпишите пустое изображение).

Некоторые боты разбирают JS, но, конечно, никто не загружает CSS-изображения.Одна из ловушек - как и в случае с JS - заключается в том, что при этом вы исключите браузеры на текстовой основе, но это менее 1% населения всемирной паутины.Кроме того, клиентов с отключенным CSS, безусловно, меньше, чем клиентов с отключенным JS (мобильные телефоны!).

Чтобы сделать его более надежным для (обычного) случая, когда более продвинутые боты (Google, Yahoo и т.д.) Могут сканировать их в будущем, запретите путь к изображению CSS в robots.txt (что в любом случае будут уважать лучшие боты).

Я использую следующее для своего приложения статистики / счетчика:

<?php
    function is_bot($user_agent) {
        return preg_match('/(abot|dbot|ebot|hbot|kbot|lbot|mbot|nbot|obot|pbot|rbot|sbot|tbot|vbot|ybot|zbot|bot\.|bot\/|_bot|\.bot|\/bot|\-bot|\:bot|\(bot|crawl|slurp|spider|seek|accoona|acoon|adressendeutschland|ah\-ha\.com|ahoy|altavista|ananzi|anthill|appie|arachnophilia|arale|araneo|aranha|architext|aretha|arks|asterias|atlocal|atn|atomz|augurfind|backrub|bannana_bot|baypup|bdfetch|big brother|biglotron|bjaaland|blackwidow|blaiz|blog|blo\.|bloodhound|boitho|booch|bradley|butterfly|calif|cassandra|ccubee|cfetch|charlotte|churl|cienciaficcion|cmc|collective|comagent|combine|computingsite|csci|curl|cusco|daumoa|deepindex|delorie|depspid|deweb|die blinde kuh|digger|ditto|dmoz|docomo|download express|dtaagent|dwcp|ebiness|ebingbong|e\-collector|ejupiter|emacs\-w3 search engine|esther|evliya celebi|ezresult|falcon|felix ide|ferret|fetchrover|fido|findlinks|fireball|fish search|fouineur|funnelweb|gazz|gcreep|genieknows|getterroboplus|geturl|glx|goforit|golem|grabber|grapnel|gralon|griffon|gromit|grub|gulliver|hamahakki|harvest|havindex|helix|heritrix|hku www octopus|homerweb|htdig|html index|html_analyzer|htmlgobble|hubater|hyper\-decontextualizer|ia_archiver|ibm_planetwide|ichiro|iconsurf|iltrovatore|image\.kapsi\.net|imagelock|incywincy|indexer|infobee|informant|ingrid|inktomisearch\.com|inspector web|intelliagent|internet shinchakubin|ip3000|iron33|israeli\-search|ivia|jack|jakarta|javabee|jetbot|jumpstation|katipo|kdd\-explorer|kilroy|knowledge|kototoi|kretrieve|labelgrabber|lachesis|larbin|legs|libwww|linkalarm|link validator|linkscan|lockon|lwp|lycos|magpie|mantraagent|mapoftheinternet|marvin\/|mattie|mediafox|mediapartners|mercator|merzscope|microsoft url control|minirank|miva|mj12|mnogosearch|moget|monster|moose|motor|multitext|muncher|muscatferret|mwd\.search|myweb|najdi|nameprotect|nationaldirectory|nazilla|ncsa beta|nec\-meshexplorer|nederland\.zoek|netcarta webmap engine|netmechanic|netresearchserver|netscoop|newscan\-online|nhse|nokia6682\/|nomad|noyona|nutch|nzexplorer|objectssearch|occam|omni|open text|openfind|openintelligencedata|orb search|osis\-project|pack rat|pageboy|pagebull|page_verifier|panscient|parasite|partnersite|patric|pear\.|pegasus|peregrinator|pgp key agent|phantom|phpdig|picosearch|piltdownman|pimptrain|pinpoint|pioneer|piranha|plumtreewebaccessor|pogodak|poirot|pompos|poppelsdorf|poppi|popular iconoclast|psycheclone|publisher|python|rambler|raven search|roach|road runner|roadhouse|robbie|robofox|robozilla|rules|salty|sbider|scooter|scoutjet|scrubby|search\.|searchprocess|semanticdiscovery|senrigan|sg\-scout|shai\'hulud|shark|shopwiki|sidewinder|sift|silk|simmany|site searcher|site valet|sitetech\-rover|skymob\.com|sleek|smartwit|sna\-|snappy|snooper|sohu|speedfind|sphere|sphider|spinner|spyder|steeler\/|suke|suntek|supersnooper|surfnomore|sven|sygol|szukacz|tach black widow|tarantula|templeton|\/teoma|t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e|theophrastus|titan|titin|tkwww|toutatis|t\-rex|tutorgig|twiceler|twisted|ucsd|udmsearch|url check|updated|vagabondo|valkyrie|verticrawl|victoria|vision\-search|volcano|voyager\/|voyager\-hc|w3c_validator|w3m2|w3mir|walker|wallpaper|wanderer|wauuu|wavefire|web core|web hopper|web wombat|webbandit|webcatcher|webcopy|webfoot|weblayers|weblinker|weblog monitor|webmirror|webmonkey|webquest|webreaper|websitepulse|websnarf|webstolperer|webvac|webwalk|webwatch|webwombat|webzinger|wget|whizbang|whowhere|wild ferret|worldlight|wwwc|wwwster|xenu|xget|xift|xirq|yandex|yanga|yeti|yodao|zao\/|zippp|zyborg|\.\.\.\.)/i', $user_agent);
    }

    //example usage
    if (! is_bot($_SERVER["HTTP_USER_AGENT"])) echo "it's a human hit!";
?>

Я удалил ссылку на исходный код, потому что теперь он перенаправляет на приложение для еды.

В настоящее время я использую AWStats и Webalizer для мониторинга моих файлов журналов для Apasce2, и до сих пор они довольно хорошо справлялись с этим.Если вы хотите, вы можете ознакомиться с их исходным кодом, поскольку это проект с открытым исходным кодом.

Вы можете получить исходный код по адресу http://awstats.sourceforge.net или, в качестве альтернативы, ознакомьтесь с часто задаваемыми вопросами http://awstats.sourceforge.net/docs/awstats_faq.html

Надеюсь, это поможет, RayQuang

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

Чтобы определить, какие запросы делаются нечестными ботами, вам лучше всего (основываясь на интересном исследовании этого парня) заключается в том , чтобы поймать событие фокусировки Javascript .

Если срабатывает событие фокусировки, страница почти наверняка была загружена человеком.

Вместо того чтобы пытаться поддерживать невероятно длинный список пользовательских агентов spider, мы ищем вещи, которые наводят на мысль о человеческом поведении.Принцип этого заключается в том, что мы делим количество сеансов на две цифры:количество одностраничных сеансов и количество многостраничных сеансов.Мы удаляем сессионный файл cookie и используем его для определения многостраничных сеансов.Мы также удаляем постоянный файл cookie "Идентификатор машины";возвращающийся пользователь (найден файл cookie с идентификатором машины) рассматривается как многостраничный сеанс, даже если он просматривает только одну страницу в этом сеансе.У вас могут быть другие характеристики, которые подразумевают "человеческого" посетителя - например, реферером является Google (хотя я считаю, что поисковый бот MS маскарадизируется как стандартный пользовательский агент, на который ссылается ключевое слово realistic, чтобы проверить, что сайт не отображает контент, отличный от того, который предоставлен их боту], и это поведение очень похоже на человеческое!)

Конечно, это не безошибочно, и, в частности, если у вас много людей, которые приходят и "кликают", это не будет хорошей статистикой для вас, или если у вас преобладают люди с отключенными файлами cookie (в нашем случае они не смогут использовать наш сайт [корзина покупок] без включенных сеансовых файлов cookie).

Взяв данные у одного из наших клиентов, мы обнаружили, что ежедневное количество сеансов постоянно меняется - изо дня в день на порядок;однако, если мы вычтем 1000 из многостраничной сессии в день, то получим чертовски близкую к линейной норму в 4 многостраничных сессии на размещенный заказ / две сессии на корзину.Я понятия не имею, каковы остальные 1000 многостраничных сеансов в день!

Записывайте движения мыши и прокрутку с помощью javascript.По записанным данным вы можете определить, человек это или бот.Если только бот действительно не очень сложный и не имитирует движения человеческой мыши.

Предварительное условие - реферер установлен

уровень apache:

LogFormat "%U %{Referer}i %{%Y-%m-%d %H:%M:%S}t" human_log
RewriteRule ^/human/(.*)   /b.gif [L]
SetEnv human_session 0

# using referrer
SetEnvIf Referer "^http://yoursite.com/" human_log_session=1

SetEnvIf Request_URI "^/human/(.*).gif$" human_dolog=1
SetEnvIf human_log_session 0 !human_dolog
CustomLog logs/human-access_log human_log env=human_dolog

На веб-странице вставьте /human/$hashkey_of_current_url.gif.
Если это бот, то вряд ли у него установлен реферер (это серая область).
Если нажать непосредственно через адресную строку браузера, она не будет включена.

В конце каждого дня, /human-access_log должен содержать весь реферер, который на самом деле является пользователем для просмотра страницы.

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

Теперь у нас есть всевозможные безголовые браузеры.Chrome, Firefox или что-то еще, что будет выполнять любой JS, который есть у вас на вашем сайте.Таким образом, любые обнаружения на основе JS не будут работать.

Я думаю, что самым надежным способом было бы отслеживать поведение на месте.Если бы я написал бота и хотел обходить проверки, я бы имитировал прокрутку, перемещение мыши, наведение курсора мыши, историю браузера и т.д.события только с безголовым chrome.Чтобы перевести это на следующий уровень, даже если headless chrome добавит в запрос некоторые подсказки о режиме "без головы", я мог бы разветвить репозиторий chrome, внести изменения и создать свои собственные двоичные файлы, которые не оставят следов.

Я думаю, что это может быть самым близким ответом на реальное обнаружение, независимо от того, человек это или нет, без каких-либо действий со стороны посетителя:

https://developers.google.com/recaptcha/docs/invisible

Я не уверен в методах, стоящих за этим, но я считаю, что Google проделал хорошую работу, проанализировав миллиарды запросов с помощью своих ML-алгоритмов, чтобы определить, является ли поведение человеческим или ботинковым.

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

Разместите на своих страницах gif размером 1x1, за которым вы следите.Если загружено, то это, скорее всего, браузер.Если он не загружен, то, скорее всего, это скрипт.

=?Извините, я неправильно понял.Вы можете попробовать другой вариант, который я настроил на своем сайте:создайте веб-страницу без ссылок с жестким / странным названием и регистрируйте отдельные посещения этой страницы.Большинство, если не все, посетителей этой страницы будут ботами, таким образом, вы сможете создавать свой список ботов динамически.

Ниже следует оригинальный ответ (получаю отрицательные оценки!)

Единственный надежный способ отличить ботов от людей - это [CAPTCHA][1].Вы можете использовать [reCAPTCHA] [2], если это вас устраивает.

[1]: http://en.wikipedia.org/wiki/Captcha
[2]: http://recaptcha.net/

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

У вас также были бы проблемы с ложноположительными результатами - как человек, я не очень часто читаю об этом а robots.txt в моем браузере, но я, конечно, могу.Чтобы они не отображались как боты, вы могли бы внести в белый список некоторые распространенные пользовательские агенты браузера и считать, что они всегда являются людьми.Но это просто превратилось бы в ведение списка пользовательских агентов для браузеров вместо списка для ботов.

Итак, этот did-they-request-robots.txt подход, конечно, не даст 100% надежных результатов, но он может предоставить некоторую эвристику для использования в готовом решении.

Я удивлен, что никто не рекомендовал внедрять Тест Тьюринга.Просто поговорите с человеком на другом конце провода.

Программное решение просто не подойдет:Посмотрите, что происходит, когда ПЭРРИ встречает ДОКТОРА

Эти два "персонажа" оба являются ботами "chatter", которые были написаны в ходе исследований искусственного интеллекта в 70-х годах:чтобы посмотреть, как долго они могли обманывать реального человека, заставляя его думать, что они тоже люди.Персонаж ПЭРРИ был смоделирован как параноидальный шизофреник, а ДОКТОР - как стереотипный психотерапевт.

Вот еще немного предыстории

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top