web-dev-qa-db-ja.com

人間の訪問者とは別にボットに統計を求めますか?

私は自分の簡単なウェブ統計スクリプトを転がそうとしています。

私が知る限り、道路上の唯一の大きな障害は、ボットとは別に人間の訪問者に知らせることです。定期的に維持する必要のない解決策が欲しい(ボット関連のユーザーエージェントでテキストファイルを更新したくない)。

Akismetがスパムに対して行うようなオープンサービスはありますか?またはPHPスパイダーとボットの認識に特化し、頻繁な更新を提供するプロジェクトがありますか?

明確にするために:ボットをブロックするつもりはありません。 100%防水の結果は必要ありません。統計からできるだけ多く除外したいだけです。 user-Agentの解析はオプションですが、解析するパターンを維持するのは大変な作業です。私の質問は、すでにそれを行うプロジェクトまたはサービスがあるかどうかです。

バウンティ:トピックに関する参考質問としてこれをプッシュすると思いました。最高の/最も独創的/最も技術的に実行可能な寄付は、報奨金の額を受け取ります。

56
Pekka 웃

人間とボットは同じようなことをしますが、ボットは人間がしないことをします。それらを特定してみましょう。振る舞いを見る前に、 RayQuang's コメントを有用であるとして受け入れましょう。訪問者がボットのユーザーエージェント文字列を持っている場合、それはおそらくボットです。 「Googleクローラー」(または類似の何か)を使って回り回っている人が、何かを壊そうとしているのでなければ、UAとしてイメージすることはできません。リストを手動で更新したくないのはわかっていますが、リストを自動でプルするとよいでしょう。今後10年間リストが古くなっても、役に立ちます。

Javascriptと画像の読み込みについてはすでに言及している人もいますが、Googleは両方を行います。現在、両方を実行するボットがいくつかあると想定する必要があるため、それらはもはや人間の指標ではありません。ただし、ボットがまだ独自に行うことは、「見えない」リンクをたどることです。ユーザーには見えない非常に卑劣な方法でページにリンクします。それが続くなら、ボットを持っている。

ボットは、常にではありませんが、robots.txtを尊重することがよくあります。ユーザーはrobots.txtを気にしません。robots.txtを取得する誰もがボットであると考えられます。ただし、さらに一歩進んで、ダミーのCSSページをrobots.txtで除外されているページにリンクすることができます。通常のCSSは読み込まれているが、ダミーのCSSが読み込まれていない場合、それは間違いなくボットです。 IPごとに負荷のテーブル(おそらくメモリ内)を作成し、matchに含まれていないものを作成する必要がありますが、これは本当に確かなことです。

したがって、これをすべて使用するには、IPアドレスごとにボットのデータベーステーブルを維持します。非表示のリンクに続くものを追加し、「実際の」CSSをロードするがrobots.txt CSSを無視するものを追加します。多分すべてのrobots.txtダウンローダーも追加します。最後のステップとしてユーザーエージェント文字列をフィルタリングし、これを使用して簡単な統計分析を行い、ボットであることがわかっているものを識別するためにそれらのメソッドがどれほど強力に機能しているかを確認します。

72
Jeff Ferland

最も簡単な方法は、ユーザーエージェントに「bot」または「spider」が含まれているかどうかを確認することです。 ほとんどの場合

21
Yacoby

EDIT(10年後):Lukasがコメントボックスで言ったように、今日のほとんどすべてのクローラーはJavaScriptをサポートしているので、サイトはJSベースでしたが、ほとんどのボットは自動的に取り除かれます。

ボットリストをフォローして、そのユーザーエージェントをフィルタリングリストに追加できます。

このボットリストを見てください。

この user-agent list もかなり良いです。ちょうどすべてのBを取り除き、設定は完了です。

EDIT:eSniff によって行われたすばらしい作業 上記のリストはここにあります "クエリと解析が簡単なフォームでrobotstxt.org/db/all.txt新しいボットはそれぞれrobot-id:XXXで定義されています。週に1回ダウンロードして何かに解析できるはずです。あなたのスクリプトは彼のコメントで読むことができるように "を使用できます。

それが役に立てば幸い!

13
Frankie

CSSの背景画像として偽装されたPHP statsスクリプトを検討してください(適切な応答ヘッダー(少なくともコンテンツタイプとキャッシュコントロール)を提供しますが、空の画像を書き出します)。

一部のボットはJSを解析しますが、確かに誰もCSS画像をロードしません。 JSと同様に、1つの落とし穴は、これを使用してテキストベースのブラウザーを除外することですが、それは世界規模のWeb人口の1%未満です。また、CSSが無効なクライアントは、JSが無効なクライアント(モバイル!)よりも確かに少ないです。

より高度なボット(Google、Yahooなど)が将来クロールする可能性がある(例外的ではない)ケースに対してより確実にするために、robots.txt(より良いボットが尊重する)のCSS画像へのパスを許可しないとにかく)。

11
BalusC

私は統計/カウンターアプリに以下を使用します:

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

元のコードソースへのリンクを削除しました。これは、Foodアプリにリダイレクトされるためです。

6
chimeraha

ユーザーエージェントを確認すると、正直なボットには警告されますが、スパマーには警告されません。

どのリクエストが不正なボットによって行われたかを知るには、最善の策( この人の興味深い研究に基づく )はJavaScriptフォーカスイベントをキャッチすることです

Focusイベントが発生した場合、ページはほぼ確実に人間によってロードされました。

4
TehShrike

現在、AWstatsとWebalizerを使用してApasce2のログファイルを監視していますが、これまでのところ、彼らはかなりうまく機能しています。オープンソースプロジェクトなので、ソースコードを確認できます。

http://awstats.sourceforge.net でソースを取得するか、またはFAQ http://awstats.sourceforge.netを参照してください。 /docs/awstats_faq.html

RayQuangがお役に立てば幸い

4

スパイダーユーザーエージェントの非常に長いリストを維持しようとするのではなく、人間の行動を示唆するものを探します。これらの原則は、セッション数を2つの数値に分割することです。1ページのセッションの数と複数ページのセッションの数です。セッションCookieをドロップし、それを使用してマルチページセッションを決定します。また、永続的な「マシンID」Cookieをドロップします。戻ってきたユーザー(マシンID Cookieが見つかりました)は、そのセッションで1ページしか表示していなくても、マルチページセッションとして扱われます。 「人間の」ビジターを示唆する他の特性がある可能性があります。たとえば、リファラーはGoogleです(ただし、サイトが別のコンテンツを表示していないことを確認するために、現実的なキーワードで参照される標準のUserAgentとしてMS Searchボットマスカラードを使用していると思いますが[ボットに与えられたものに]、そしてその行動は人間のように見えます!)

もちろん、これは非の打ちどころのないものであり、特にあなたが到着して「クリックオフ」する人がたくさんいる場合、それはあなたにとって良い統計にはなりませんし、Cookieがオフになっている人(私たちの場合、セッションCookieが有効になっていないと、[ショッピングカート]サイトを使用できません)。

クライアントの1つからデータを取得すると、1日の単一セッションの数はいたるところにあることがわかります。ただし、1日あたりのマルチページセッションから1,000を差し引くと、注文ごとに4つのマルチページセッション/バスケットごとに2つのセッションというほぼ線形の比率になります。 1日に他の1,000のマルチページセッションが何であるか、私にはよくわかりません!

3
Kristen

JavaScriptを使用してマウスの動きとスクロールを記録します。記録されたデータから、それが人間かボットかがわかります。ボットが本当に本当に洗練されていないかぎり、人間のマウスの動きを模倣しています。

2
neoneye

前提条件-リファラーが設定されている

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

Webページに/human/$hashkey_of_current_url.gifを埋め込みます。
ボットの場合、リファラーが設定されている可能性はほとんどありません(これは灰色の領域です)。
ブラウザのアドレスバーを使用して直接ヒットした場合は含まれません。

毎日の終わりに、/human-access_logには実際に人間のページビューであるすべてのリファラーが含まれているはずです。

安全にプレイするために、Apacheログからのリファラーのハッシュはイメージ名と集計する必要があります

1
ajreal

今、私たちはあらゆる種類のヘッドレスブラウザを持っています。 Chrome、Firefoxなど、サイトにあるJSを実行します。したがって、JSベースの検出は機能しません。

最も自信のある方法は、サイト上で行動を追跡することだと思います。ボットを作成してチェックをバイパスしたい場合は、スクロール、マウスの移動、ホバー、ブラウザの履歴などのイベントをヘッドレスクロムだけで模倣します。それを次のレベルに変えるには、ヘッドレスchromeが「ヘッドレス」モードに関するヒントをリクエストに追加しても、chrome repo、変更を加えることができますそして、自分のバイナリをビルドして、跡を残さないようにします。

訪問者からのアクションがないために人間であるかどうかにかかわらず、これが実際の検出への最も近い答えであると私は思います:

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

この背後にある手法はよくわかりませんが、GoogleがMLアルゴリズムを使用して何十億ものリクエストを分析し、動作が人間的であるかボット的であるかを検出することで、うまく機能したと思います。

これは追加のHTTPリクエストですが、すぐにバウンスされた訪問者を検出しないため、注意が必要です。

1
Lukas

=?すみません、誤解しています。私のサイトで設定した別のオプションを試すこともできます。ハード/奇妙な名前でリンクされていないWebページを作成し、このページへのアクセスをログに記録します。このページへの訪問者のすべてではないにしても、ほとんどがボットになります。そうすれば、ボットリストを動的に作成できます。

元の答えは次のとおりです(否定的な評価を得ています!)

ボットと人間を区別する唯一の信頼できる方法は、[CAPTCHAS] [1]です。 [reCAPTCHA] [2]は、必要に応じて使用できます。

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

0
Ast Derek

robots.txtもリクエストするユーザーエージェントからのリクエストをすべて除外できます。すべての正常に動作するボットはそのようなリクエストを行いますが、悪いボットは検出を回避します。

また、誤検知の問題も発生します。人間としては、ブラウザで robots.txt を読むことはあまりありませんが、確かに可能です。これらがボットとして誤って表示されるのを防ぐために、いくつかの一般的なブラウザのユーザーエージェントをホワイトリストに登録し、常に人間であると見なすことができます。しかし、これはボットのユーザーエージェントのリストではなく、ブラウザのユーザーエージェントのリストを維持することになります。

したがって、このdid-they-request-robots.txtアプローチでは、100%水密の結果は得られませんが、完全なソリューションにフィードするための経験則が提供される場合があります。

0
Day

追跡している1x1 gifをページに入れます。ロードされた場合、ブラウザである可能性があります。読み込まれていない場合は、スクリプトである可能性があります。

0
neoneye