Я ищу, чтобы свернуть собственный скрипт простой статистики.
Единственное серьезное препятствие на пути, насколько я вижу, говорит людям о людях помимо ботов. Я хотел бы иметь решение для того, что мне не нужно поддерживать на регулярной основе (т. Е. Я не хочу обновлять текстовые файлы с помощью связанных с ботом User-агентов).
Есть ли какая-либо открытая услуга, которая делает это, как Akismet для спама? Или есть проект PHP, посвященный распознаванию пауков и ботов и частому обновлению?
Чтобы уточнить: я не хочу блокировать ботов. Мне не нужны 100% водонепроницаемые результаты . Я просто хочу исключить как можно больше из моей статистики. Знайте, что разбор user-Agent является опцией, но сохранение шаблонов для синтаксического анализа – это большая работа. Мой вопрос заключается в том, есть ли какой-либо проект или служба, которые уже делают это.
Баунти: Я думал, что буду настаивать на этом как справочный вопрос по этой теме. Самый лучший / самый оригинальный / наиболее технически жизнеспособный взнос получит сумму вознаграждения.
Люди и боты будут делать подобные вещи, но боты будут делать то, что люди не делают. Давайте попробуем идентифицировать эти вещи. Прежде чем мы посмотрим на поведение, давайте примем комментарий RayQuang как полезный. Если у посетителя есть строка пользовательского агента бота, это, вероятно, бот. Я не могу представить, чтобы кто-нибудь обходил «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 в качестве последнего шага и рассмотрите возможность использования этого, чтобы выполнить быстрый анализ статистики и посмотреть, насколько сильно эти методы работают для определения того, что мы знаем о ботах.
Самый простой способ – проверить, включает ли их useragent «бот» или «паук». Большинство из них делают .
Для начала, если ваше программное обеспечение будет работать на основе Javascript, большинство ботов будут автоматически удалены как боты, как правило, не имеют Javascript.
Тем не менее, прямой ответ на ваш вопрос – следовать списку ботов и добавлять их пользовательский агент в список фильтрации.
Взгляните на этот список ботов.
Этот список пользовательских агентов также очень хорош. Просто вычеркните все буквы B, и вы настроены.
EDIT: Удивительная работа, выполненная eSniff, имеет приведенный выше список здесь « в форме, которая может быть запрошена и проанализирована проще. Robotstxt.org/db/all.txt Каждый новый Бот определяется с помощью идентификатора робота: XXX. загружать его один раз в неделю и анализировать его на то, что ваш скрипт может использовать «как вы можете прочитать в своем комментарии.
Надеюсь, поможет!
Рассмотрим скрипт статистики PHP, который замаскирован как фоновое изображение CSS (дайте правильные заголовки ответов – по крайней мере, тип контента и управление кешем – но напишите пустое изображение).
Некоторые боты анализируют JS, но, безусловно, никто не загружает изображения CSS. Одна ложь – с JS – заключается в том, что вы исключите текстовые браузеры с этим, но это составляет менее 1% от всего мирового сообщества. Кроме того, есть, конечно, клиенты с ограниченными возможностями CSS, чем клиенты с отключенным JS (мобильные телефоны!).
Чтобы сделать его более прочным для (несовместимого) случая, когда более продвинутые боты (Google, Yahoo и т. Д.) Могут сканировать их в будущем, запретите путь к изображению CSS в robots.txt
(который лучше всех уважают боты) ,
В настоящее время я использую AWstats и Webalizer для мониторинга моих файлов журналов для Apasce2, и пока они неплохо справляются с этим. Если вы хотите, чтобы вы могли посмотреть исходный код, поскольку это проект с открытым исходным кодом.
Вы можете получить источник по адресу http://awstats.sourceforge.net или, альтернативно, просмотреть FAQ http://awstats.sourceforge.net/docs/awstats_faq.html
Надеюсь, что это поможет, RayQuang
Я использую следующее для моего приложения статистики / счетчика:
<?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!"; ?>
Я получил список ботов отсюда , а затем в основном минимизировал функцию.
Проверка агента-пользователя предупредит вас о честных ботах, но не о спамерах.
Чтобы рассказать, какие просьбы сделаны нечестными ботами, ваш лучший выбор ( основанный на интересном исследовании этого парня ) заключается в том, чтобы поймать событие фокуса Javascript .
Если фокусное событие срабатывает, страница была почти наверняка загружена человеком.
- Изменить: это правда, люди с выключенным Javascript не будут отображаться как люди, но это не большой процент пользователей сети .
- Edit2: Текущие боты также могут выполнять Javascript, по крайней мере, Google .
Вместо того, чтобы пытаться поддерживать невероятно длинный список агентов-пауков User Agents, мы ищем вещи, которые предполагают поведение человека. Принцип этого заключается в том, что мы разделили наш счет сеанса на две цифры: количество одностраничных сеансов и количество сеансов с несколькими страницами. Мы отбрасываем cookie сеанса и используем его для определения многостраничных сеансов. Мы также бросаем постоянный файл cookie «Machine ID»; возвращаемый пользователь (найденный cookie Machine ID) рассматривается как многостраничный сеанс, даже если он просматривает только одну страницу в этом сеансе. У вас могут быть другие характеристики, которые подразумевают «человека» посетителя. Например, реферал Google (хотя я считаю, что MS Search bot mascarades в качестве стандартного UserAgent ссылается на реалистичное ключевое слово, чтобы проверить, что на сайте не отображается другой контент [ к тому, что дается их Бот], и это поведение очень похоже на человека!)
Конечно, это не невероятно, и, в частности, если у вас много людей, которые приходят и «щелкают», это не будет хорошей статистикой для вас, и если у вас преобладают люди с выключенными cookies (в нашем случае они не сможет использовать наш сайт [shopping cart] без разрешенных сессионных файлов).
Принимая данные от одного из наших клиентов, мы обнаруживаем, что ежедневный односеансовый счет повсюду – по порядку величины отличается от дня к дню; однако, если мы вычитаем 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
На веб-странице вставьте a /human/$hashkey_of_current_url.gif
.
Если это бот, вряд ли есть набор рефереров (это серая область).
Если нажать прямо с помощью адресной строки браузера, он не будет включен.
В конце каждого дня /human-access_log
должен содержать весь /human-access_log
который фактически является просмотром страницы человека.
Чтобы играть безопасно, хэш реферера из журнала apache должен совпадать с именем изображения
Имейте 1×1 gif на своих страницах, о которых вы отслеживаете. Если он загружен, то скорее всего он будет браузером. Если он не загружен, это скорее скрипт.
знак равно Извините, неправильно поняли. Вы можете попробовать другой вариант, который я установил на своем сайте: создать несвязанную веб-страницу с жестким / странным именем и разделить посещения этой страницы. Большинство, если не весь посетитель этой страницы, будут ботами, таким образом вы сможете динамически создавать свой список ботов.
Оригинальный ответ следует (получение отрицательных оценок!)
Единственный надежный способ сказать ботам от людей – [CAPTCHAS] [1]. Вы можете использовать [reCAPTCHA] [2], если он вам подходит.
[1]: http://en.wikipedia.org/wiki/Captcha
[2]: http://recaptcha.net/
Я удивлен, что никто не рекомендовал проводить тест Тьюринга . Просто поговорите с человеком на другом конце.
Программного решения просто не будет: посмотрите, что произойдет, когда PARRY встречает ДОКТОРА
Эти два «персонажа» являются и «болтливыми» ботами, которые были написаны в ходе исследования ИИ в 1970 году: чтобы увидеть, как долго они могут обмануть реального человека, думая, что они также были человеком. Характер PARRY был смоделирован как параноидальный шизофреник, а THE DOCTOR – как стереотипный психотерапевт.
Вот еще один фон
Вы можете исключить все запросы, которые поступают от User Agent, который также запрашивает robots.txt
. Все корректные боты сделают такой запрос, но плохие боты избегут обнаружения.
У вас также будут проблемы с ложными срабатываниями – как человек, я не очень часто читаю robots.txt в своем браузере, но я, конечно, могу. Чтобы избежать неправильного отображения ботов, вы можете переадресовать некоторые общие пользовательские агенты браузера и считайте их всегда людьми. Но это просто превратилось бы в ведение списка User Agents для браузеров вместо одного для ботов.
Таким образом, подход did-they-request-robots.txt, конечно же, не даст 100% -ных водонепроницаемых результатов, но может предоставить некоторые эвристики для полного решения.