「ステルス」Webクローラーの検出


107

検出されたくないWebクローラーを検出するには、どのようなオプションがありますか?

(リスティング検出手法により、スマートステルスクローラープログラマーがより優れたスパイダーを作成できることは知っていますが、スマートステルスクローラーをブロックできるとは思いません。間違いを犯したものだけです。)

私はgooglebotやYahoo!などの素晴らしいクローラーについて話しているのではありません。啜る。私はボットがいいと思います:

  1. ユーザーエージェント文字列でボットとして自分自身を識別します
  2. robots.txtを読み取る(そしてそれに従う)

悪いクローラーについて話している、一般的なユーザーエージェントの後ろに隠れている、私の帯域幅を使用している、そして見返りに何も与えていない。

更新されたリストを作成できるトラップドアがいくつかあります(Chris、gsに感謝)

  1. robots.txtにのみリストされている(Disallowとマークされている)ディレクトリを追加します。
  2. 非表示のリンクを追加する(おそらくrel = "nofollow"?とマークされている)、
    • style = "display:none;" リンクまたは親コンテナ
    • Zインデックスが高い別の要素の下に配置
  3. CaPiTaLiSaTioNを理解していない人を検出し、
  4. 誰が返信を投稿しようとしているかを検出しますが、常にキャプチャに失敗します。
  5. POST専用リソースへのGETリクエストを検出する
  6. リクエスト間の間隔を検出する
  7. 要求されたページの順序を検出する
  8. 誰が(一貫して)http経由でhttpsリソースをリクエストするかを検出する
  9. 画像ファイルを要求しない人を検出します(これは、既知の画像対応ブラウザのユーザーエージェントのリストと組み合わせて、驚くほどうまく機能します)

一部のトラップは、「良い」ボットと「悪い」ボットの両方によってトリガーされます。それらをホワイトリストと組み合わせることができます:

  1. 罠を引き起こす
  2. リクエストrobots.txt
  3. 従ったため、別のトラップをトリガーしません robots.txt

ここでもう1つ重要なことは
、スクリーンリーダーを使用している視覚障害者を検討してください。あなたに連絡する方法を提供するか、(画像以外の)キャプチャを解決してブラウジングを続行してください。

通常の人間の訪問者として自分自身をマスクしようとしているWebクローラーを自動的に検出する方法は何ですか。

更新
問題はそうではありません:すべてのクローラーをどのように捕まえるのですか?問題は、クローラーを検出する可能性を最大化するにはどうすればよいかです。

いくつかのスパイダーは本当によく、実際にhtml、xhtml、css javascript、VBスクリプトなどを解析して理解し
ています... 私には幻想がありません。私はそれらを倒すことができません。

ただし、一部のクローラーがどれほど愚かであるかは驚くでしょう。(私の意見では)愚かさの最も良い例は:すべてのURLをリクエストする前に小文字にキャストすることです。

そして、さまざまなトラップドアを回避するには「十分に不十分」なクローラーがたくさんあります。

回答:


15

しばらく前に、私は小さめのホスティング会社と協力して、彼らがこれに対するソリューションを実装するのを助けました。私が開発したシステムでは、特定のIPアドレスからの過度のアクティビティがないかWebサーバーログを調べ、攻撃者をブロックするファイアウォールルールを発行しました。http://www.iplists.com/に基づくIPアドレス/範囲のホワイトリストが含まれており、要求されたユーザーエージェント文字列をチェックすることにより、必要に応じて自動的に更新され、クライアントが正当なスパイダーであると主張したが、ホワイトリストでは、DNS /逆DNSルックアップを実行して、送信元IPアドレスがボットの要求された所有者に対応していることを確認しました。フェイルセーフとして、これらのアクションは、誤った評価の場合にアドレスをブラック/ホワイトリストに登録するためのリンクとともに、メールで管理者に報告されました。

6か月ほどはそのクライアントと話をしていませんが、最後に聞いたところ、システムは非常に効果的に機能していました。

補足:ヒット率制限に基づいて同様の検出システムを実行することを考えている場合は、少なくとも1分(できれば少なくとも5分)の合計を使用してください。毎秒5〜10ヒットを超える人をブロックしたいこの種のスキームについて多くの人が話しているのを目にします。これにより、画像の多いページで誤検知が発生し(画像が集計から除外されている場合を除く)、偽発生します。私のような誰かがすべてを読みたい興味深いサイトを見つけたときのポジティブなので、タブのすべてのリンクを開いて、最初のリンクを読みながらバックグラウンドでロードします。


5
Webクローラーをブロックすることによる誤検知により、Webトラフィックが完全に停止することがわかりました。基本的に、説明したこの単純な方法を簡単に迂回できるクローラーを妨害しようとする不十分な試みで、ユーザーの99.8%を怒らせています。サイトのユーザーエクスペリエンスが損なわれるため、ユーザーアクセスを拒否したり妨害したりするのは決して良いことではありません。
KJW 2013年

14

Project Honeypotを参照してください-彼らはボットトラップを大規模にセットアップしています(IPをDNSRBLに設定しています)。

トリッキーなURLとHTMLを使用します。

<a href="https://stackoverflow.com//example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

HTMLでは、コメント、CDATA要素、エンティティなどを使用して、たくさんのトリックを使用できます。

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->

9

簡単な解決策は、リンクを作成して非表示にすることです

<a href="iamabot.script" style="display:none;">Don't click me!</a>

もちろん、ソースコードを見る人の中には、そのリンク先を確認するためだけにそのリンクをたどる人もいるはずです。しかし、あなたはそれらのユーザーにキャプチャを提示することができます...

もちろん、有効なクローラーもリンクをたどります。ただし、rel = nofollowを実装するのではなく、有効なクローラーの兆候を探してください。(ユーザーエージェントと同様)


1
ボットがリンクのCSS属性をチェックし、人間のユーザーには表示されないためリンクをたどらない場合
Bob Somers

1
誰かが無効にCSS(あるいは全くCSSのサポートを)持っている場合は、リンクをラベリングすることは、リンクが表示されます。..より良いアイデアだろう「私はクリックしないでください」..
DBR

良いアイデア。おそらく、テキストを「。」に変更します。そしてCSSスタイルは背景と一致します-ほとんどのユーザーには見えませんか?または、スクリプトを実行して1秒後に非表示にし、javascriptの非表示コマンドをリンクにリンクできないボットにのみ表示されるようにしますか?
2015年

1
SEOの観点から、黒い帽子のペナルティに注意してください。
アルフレッドウォレス

6

記載していないものの1つは、不良クローラーを検出するためによく使用されます。

ヒット速度、優れたWebクローラーはヒットを分割するので、リクエストでサイトをあふれさせません。悪い人は次の3つのうちの1つを行います:

  1. 順次リンクを次々にヒットする
  2. いくつかの並列シーケンスでシーケンシャルリンクをヒットします(一度に2つ以上)。
  3. 一定の間隔でシーケンシャルリンクをヒットする

また、一部のオフラインブラウジングプログラムは、多数のページを大量に消費します。IPアドレスによるブロックを開始するために、どのようなしきい値を使用したいのかわかりません。

このメソッドは、fmirrorやwgetなどのミラーリングプログラムもキャッチします。

ボットが時間間隔をランダム化する場合は、リンクが順次または深さ優先でトラバースされているかどうかを確認できます。または、ボットが大量のテキスト(読む言葉など)をトラバースしているかどうかを確認できます。短すぎる期間。また、1時間あたりのリクエスト数を制限しているサイトもあります。

実際、どこかで、どこでユーザーがキロバイト単位で大量のデータを取得した場合に、ボットではないことを証明するように要求するキャプチャが表示されるという考えを聞きました。それが実装されているのを見たことがない。

リンクを非表示に更新

リンクを非表示にする限り、divを別のdivの下に配置できます。CSS(表示順序の最初に配置)を使用し、場合によってはz順序を設定します。ボットは、JavaScriptをすべて解析してメニューかどうかを確認しないと、それを無視できませんでした。ある程度、目に見えないDIV要素内のリンクも、ボットがすべてのJavaScriptを解析しない限り無視できません。

そのアイデアを完成させると、隠された要素を潜在的に表示する可能性のある呼び出されていないJavaScriptは、JavaScript解析ボットのサブセットを騙す可能性があります。そして、実装するのはそれほど多くの作業ではありません。


16
「JavaScriptを無視することはボットであることを意味する」メソッドの主な欠陥:一部の人はNoScriptプラグインを使用しています。私がサイトをホワイトリストに登録し、ボットではないと確信している場合を除いて、JavaScriptを実行しているサイトはありません。
Dave Sherohman、2008年

2
ボットはJavascriptを実行できるようになりました...それは2013年です。だから全体の議論があります。Webクローラーが順次選択してサイトにアクセスするのは誰ですか?別の巨大な仮定。
KJW 2013年

1
JavaScriptはハニーポットリンクを表示するためだけのものでした。ボットハニーポットリンクを表示するJavaScriptを解析し、リンクをたどる可能性を高くするという考えです。ただし、実際のユーザーの場合、リンクを表示するコードは実行されません。したがって、NoScriptユーザーは、関数をランダムに実行しない人と一緒に問題ないでしょう。とはいえ、ボットがランダムにコードを実行する理由/方法はわかりません。要素が表示されるかどうかを判断するために静的分析を行っている場合、それは1つの派手なボットでしょう。
Rick

4

私がフォームで聞いたことのある簡単なボット検出方法の1つは、隠し入力手法です。フォームを保護しようとしている場合は、完全に正当に見えるIDをフォームに入力してください。次に、cssを外部ファイルで使用して非表示にします。または、本当に偏執的である場合は、ページの読み込み時に入力ボックスを非表示にするjqueryのようなものをセットアップします。これを正しく行うと、ボットが理解するのが非常に困難になると思います。特に非表示の入力にid = "fname"などのIDを与える場合、それらのボットはページのすべてに記入することが自然に存在することを知っています。


2
通常のブラウザのように、ボットがjqueryの終了を待つことができる場合はそうではありません。これは00年代の初めにはうまく機能していました
KJW 2013年

3

優れたユーザーエージェント文字列に追いつくのは、実際にはそれほど簡単ではありません。ブラウザのバージョンは行き来します。さまざまな動作によってユーザーエージェント文字列に関する統計を作成すると、興味深いことが明らかになります。

これがどの程度自動化できるかはわかりませんが、少なくとも1つの差別化要素です。


3

未テストですが、正規表現を作成できるユーザーエージェントの一覧を次に示します。ほとんどの方法であなたを得ることができます:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:craftbot@yahoo.com|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

引用元:http : //perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/


1

紹介を確認することもできます。紹介がボットの疑いを引き起こすことはありません。悪い紹介は確かにそれがブラウザではないことを意味します。

非表示のリンクを追加する(おそらくrel = "nofollow"?とマークされている)、

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

私はそれをしません。あなたはブラックハットSEOのためにグーグルによってブラックリストに載せられることができます:)


1
正確には何ですか?なぜそれがあなたをブラックリストに載せますか?
conteh 2017年

1

私は現在、Webサイトを分類するためにスキャンする会社で働いています。また、マルウェアがないかサイトをチェックします。

私の経験では、Webクローラー(もちろんIEまたはFirefox UAを使用し、robots.txtには従いません)の最大のブロッカーは、マルウェアを意図的にホストしているサイトです。このサイトは、手動でサイトを読み込んで分類し、マルウェアをチェックする必要がある人間にフォールバックするため、面倒です。

私が言っているのは、Webクローラーをブロックすることで、悪質な企業に身を投じていることです。

もちろん、彼らがひどく失礼で大量の帯域幅を吸い取ってしまうのであれば、それは別の話です。


15
申し訳ありませんが、robots.txtに準拠していないクローラを実行すると、ルールに準拠していません。ルールに従わないことによって、あなた自身は本当に悪い会社に身を置くことになります。Webサイトの所有者が(robots.txtで)設定したルールを適用することは悪い習慣であることを示唆することにより、問題を誤って上下逆さまにしています。基本的に、コンテンツの正当な所有者が誰であるかを理解していないと述べています。
Jacco

11
@ジャッコ:マルウェアを探しているクローラーがルールに従ったとしても、それを見つけることはできません。マルウェアの作者に相談してください。
Zan Lynx

5
@Jacco:非準拠のクローラーをブロックしようとする正当なサイトの割合?1%未満。しようとするマルウェアのサイト?60%以上。ええ、それは疑わしいです。
Zan Lynx

4
@Jaccoは実際にはありません。公開されているWeb上のコンテンツの所有者はいません。手動でコピーして貼り付けることなくこれを行っている人は、罰ではなく賞を与えられるべきです。この著作権の概念全体をインターネット上で廃止する必要があります。創造的な革新と信頼だけが、不透明な法的ベールの脅威によってではなく、人々の注目に値する価値のあるものを構築できます。
KJW 2013年

このすべての外れ値は、サイトを運営している人がサイトに多くの時間を費やして考え、ある程度の技術的スキルを持っていることを示しています。もちろん、これほとんどのベルカーブを除外します。
パルティアンショット

1

人々はブロードクローラーに対応し続けますが、ウェブサイトに特化したクローラーには対応していません。

私はステルスクローラーを作成します。それらが個別に構築されている場合、ハニーポットや非表示のリンクはまったく効果がありません。特殊なクローラーを検出する実際の方法は、接続パターンを調べることです。

最高のシステムはAIを使用します(例:Linkedin)AIを使用してこれに対処します。
最も簡単なソリューションは、IP接続を分析し、それらのIPをブラックリストに登録するか、キャプチャを少なくとも一時的に提供するログパーサーを書き込むことです。

たとえば
、IP Xが2秒ごとに接続されているfoo.com/cars/*.htmlのに他のページには接続されていない場合-ボットまたは空腹のパワーユーザーである可能性が高いです。

あるいは、保護として機能するさまざまなjavascriptの課題(Cloudflareのアンチボットシステムなど)がありますが、それらは簡単に解決でき、何かカスタムを記述でき、クローラーの努力に値しないほど十分に抑止できます。

ただし、偽陽性の合法ユーザーを喜んで受け入れ、ボットのトラフィックを防ぐために不便を彼らにもたらすかどうかを質問する必要があります。公共データの保護は不可能パラドックスです。


-1

短い答え:中級レベルのプログラマーが何をしているかを知っている場合、実際のユーザーに影響を与えずにクローラーを検出することはできません。あなたの情報を公にすると、それをクローラーから守ることができなくなります...それは最初の修正の権利のようなものです:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.