Скажите ботов, кроме людей, для статистики? - PullRequest
56 голосов
/ 11 ноября 2009

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

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

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

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

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

Ответы [ 15 ]

71 голосов
/ 21 декабря 2010

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

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

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

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

21 голосов
/ 11 ноября 2009

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

13 голосов
/ 11 ноября 2009

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

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

Посмотрите на этот список ботов.

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

РЕДАКТИРОВАТЬ: Удивительная работа, выполненная eSniff имеет приведенный выше список здесь" в форме, которая может быть запрошена и проанализирована проще. Robotstxt. org / db / all.txt Каждый новый бот определяется идентификатором робота: XXX. Вы должны иметь возможность загружать его раз в неделю и анализировать в то, что ваш скрипт может использовать", как вы можете прочитать в его комментарии .

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

11 голосов
/ 11 ноября 2009

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

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

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

6 голосов
/ 09 февраля 2014

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

<?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!";
?>

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

4 голосов
/ 23 декабря 2010

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

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

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

4 голосов
/ 19 декабря 2010

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

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

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

3 голосов
/ 11 ноября 2009

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

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

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

2 голосов
/ 11 сентября 2010

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

1 голос
/ 30 января 2019

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

Я думаю, что наиболее уверенным способом было бы отслеживать поведение на сайте. Если бы я написал бота и хотел бы обойти проверки, я бы имитировал прокрутку, перемещение мыши, зависание, историю браузера и т. Д. Только с помощью безголового хрома. Чтобы перевести его на следующий уровень, даже если безглавый Chrome добавляет в запрос некоторые подсказки о «безголовом» режиме, я мог бы раскошелиться на Chrome Repo, внести изменения и создать свои собственные двоичные файлы, которые не оставят следов.

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...