Скажите ботам отдельно от посетителей-людей за статистику?

Я ищу, чтобы перевернуть мои собственные простые веб-статистики script.

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

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

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

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

56
11 нояб. '09 в 21:07
источник поделиться
15 ответов

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

71
21 дек. '10 в 18:29
источник

Связанные вопросы


Похожие вопросы

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

21
11 нояб. '09 в 21:13
источник

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

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

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

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

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

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

13
11 нояб. '09 в 21:21
источник

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

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

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

11
11 нояб. '09 в 21:42
источник

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

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

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

6
09 февр. '14 в 22:16
источник

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

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

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

4
19 дек. '10 в 10:26
источник

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

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

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

4
23 дек. '10 в 8:46
источник

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

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

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

3
11 нояб. '09 в 21:47
источник

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

2
11 сент. '10 в 13:13
источник

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

Уровень 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 должен содержать весь реферер, который на самом деле является просмотром страницы человека.

Чтобы играть в безопасном режиме, хэш реферера из журнала apache должен совпадать с именем изображения

1
16 дек. '10 в 23:43
источник

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

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

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

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

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

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

1
30 янв. '19 в 15:02
источник

Имейте 1x1 gif на своих страницах, которые вы отслеживаете. Если он загружен, то скорее всего он будет браузером. Если он не загружен, вероятно, будет script.

0
11 нояб. '09 в 21:36
источник

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

Программное решение просто не будет: посмотреть, что произойдет, когда PARRY Встречает DOCTOR

Эти два "персонажа" являются "болтливыми" ботами, которые были написаны в ходе исследования ИИ в 70-е годы: чтобы увидеть, как долго они могут обмануть реального человека, думая, что они тоже были людьми. Характер PARRY был смоделирован как параноидальный шизофреник, а THE DOCTOR - как стереотипный психотерапевт.

Здесь еще несколько фона

0
20 июня '10 в 7:55
источник

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

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

Единственный надежный способ рассказать боты от людей [CAPTCHAS] [1]. Ты можешь используйте [reCAPTCHA] [2], если он вам подходит.

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

0
11 нояб. '09 в 21:15
источник

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

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

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

0
20 дек. '10 в 21:30
источник

Посмотрите другие вопросы по меткам или Задайте вопрос