web-dev-qa-db-ja.com

スクリーンスクレイピングからの保護

スクリーンスクレイピングの合法性に関する私の質問に続いて、たとえそれが違法であっても、人々はまだ試みます、そう:

スクリーンスクレイピングを防止または少なくとも阻害するためにどのような技術的メカニズムを採用できますか?

ああ、そしてただニヤリと人生を困難にするために、検索エンジンへのアクセスを維持することは素晴らしいかもしれません。私はここで悪魔の代弁者を演じているかもしれませんが、深刻な根本的なポイントがあります。

30
Mat

したがって、1つのアプローチは、コード(rot13など)を難読化してから、document.write(unobfuscate(obfuscated_pa​​ge))のような処理を行うJavaScriptをページに含めることです。しかし、これは検索エンジンを完全に吹き飛ばします(おそらく!)。

もちろん、これはあなたのデータを盗もうとする人を実際に止めるわけではありませんが、それを難し​​くします。

クライアントがデータを取得すると、ほとんどゲームオーバーになるため、サーバー側で何かを確認する必要があります。

検索エンジンは基本的にスクリーンスクレイパーであることを考えると、物事は困難です。 goodスクリーンスクレイパーとbadスクリーンスクレイパーの違いを確認する必要があります。そしてもちろん、あなたには普通の人間のユーザーもいます。したがって、これは、サーバー上で、リクエストをhum​​angoodスクリーンスクレイパー、またはbad)からのものとして効果的に分類する方法の問題に帰着します。スクリーンスクレイパー。

したがって、開始する場所は、ログファイルを調べて、リクエストを効果的に分類できるパターンがあるかどうかを確認し、パターンを決定するときに、badである方法があるかどうかを確認することです。 =スクリーンスクレイパーは、この分類を知っていると、それ自体が人間または良いスクリーンスクレイパーのように見える可能性があります。

いくつかのアイデア:

  • goodスクリーンスクレイパーをIPアドレスで判別できる場合があります。
  • 同時接続の数、期間ごとの接続の総数、アクセスパターンなどによって、スクレーパーと人間を判断できる可能性があります。

明らかに、これらは理想的でも絶対確実でもありません。もう1つの戦術は、人間にとって邪魔にならないが(多分)スクレーパーにとって迷惑な対策を講じることができるかどうかを判断することです。例として、リクエストの数を遅くすることがあります。 (リクエストの時間的重要度によって異なります。リアルタイムでスクレイピングしている場合、これはエンドユーザーに影響します)。

もう1つの側面は、これらのユーザーにより良いサービスを提供することです。彼らはデータを必要としているので、明らかに彼らはスクレイピングしています。便利な形式でデータを直接取得する簡単な方法を提供すれば、画面をスクレイピングする代わりに、簡単にデータを取得できます。簡単な方法があれば、データへのアクセスを規制することができます。例:リクエスターに一意のキーを与えてから、キーごとのリクエスト数を制限してサーバーの過負荷を回避したり、1000リクエストごとに課金したりします。

もちろん、あなたをはぎ取りたいと思う人はまだいます。そして、おそらく他の方法で意欲を削ぐことができますが、彼らはおそらく非技術的であり始め、法的手段を説得する必要があります。

19
benno

それを防ぐことはできません。

63
Bombe

私はこれについてのブログ投稿をここに書きました: http://blog.screen-scraper.com/2009/08/17/further-thoughts-on-hindering-screen-scraping/

言い換えると:

あなたが誰かがそれを得ることができるインターネットに情報を投稿するならば、それは彼らが投資したい資源の数の問題です。必要なリソースを増やすためのいくつかの手段は次のとおりです。

チューリングテスト

チューリングテストの最も一般的な実装は、人間が画像内のテキストを読み取ってフォームにフィードすることを確認しようとする古いCAPTCHAです。

非常に弱いCAPTCHAを実装しているサイトが多数あり、移動に数分しかかかりません。一方、チューリングテストの非常に優れた実装がいくつかあり、選択肢があれば処理しないことを選択しますが、高度なOCRでそれらを克服できる場合があります。または、多くの掲示板スパマーがこれらを乗り越えるための巧妙なトリックを持っています。

画像としてのデータ

データのどの部分が価値があるかを知っている場合があります。その場合、そのようなテキストを画像に置き換えることが合理的になります。チューリングテストと同様に、それを読み取ることができるOCRソフトウェアがあり、画像を保存して後で誰かに読み取らせることができない理由はありません。

ただし、多くの場合、代替テキストなしでデータを画像としてリストすることは、障害を持つアメリカ人法(ADA)に違反しており、会社の法務部門に数回電話をかけることで克服できます。

コードの難読化

JavaScript関数のようなものを使用して、HTMLソースのどこにもデータがないにもかかわらず、ページにデータを表示するのは良いトリックです。他の例としては、ページに多作で無関係なコメントを入れたり、予測できない方法で物事を並べ替えるインタラクティブなページを作成したりすることが含まれます(そして、コードの配置に関係なく、CSSを使用して表示を同じにする例)。

CSSスプライト

最近、ページに数字と文字を含む1つの画像があり、CSSを使用して目的の文字のみを表示する場合があります。これは事実上、前の2つの方法の組み合わせです。まず、そのマスターイメージを取得してそこにある文字を読み取る必要があります。次に、サイトのCSSを読み取って、各タグが指している文字を特定する必要があります。

これは非常に賢い方法ですが、まだテストしていませんが、これもADAに反する可能性があると思います。

検索結果を制限する

取得したいデータのほとんどは、ある種の形式の背後にあります。簡単なものもあり、空白のフォームを送信するとすべての結果が得られます。フォームにアスタリスクまたはパーセントを入力する必要があるものもあります。最も難しいのは、クエリごとに非常に多くの結果しか得られないものです。アルファベットの文字をフォームに送信するループを作成することもありますが、それが一般的すぎる場合は、2文字または3文字のすべての組み合わせを送信するループを作成する必要があります。つまり、17,576ページのリクエストです。

IPフィルタリング

時折、勤勉なウェブマスターは、特定のIPアドレスからの多数のページ要求に気づき、そのドメインからの要求をブロックします。代替ドメインを介してリクエストを渡す方法はいくつかありますが、この方法は一般的にあまり効果的ではありません。

サイトのいじくり回し

スクレイピングは、HTML内の特定のものを常にキーオフします。一部のサイトには、HTMLを絶えず微調整して、スクレイプが常に古くなるようにするためのリソースがあります。したがって、絶えず変化する条件に対してスクレイプを継続的に更新することは費用効果が低くなります。

19
Jason Bellows

画面のスクレイピングを防ぐのはかなり難しいですが、本当に必要な場合は、HTMLを頻繁に変更したり、HTMLタグ名を頻繁に変更したりできます。ほとんどのスクリーンスクレイパーは、タグ名との文字列比較、または特定の文字列を検索する正規表現などを使用して機能します。基になるHTMLを変更する場合は、ソフトウェアを変更する必要があります。

10
JamesSugrue

防ぐのは非常に難しいでしょう。問題は、Webページが意味プログラム(ブラウザ)によって解析されるため、非常に簡単に取得できることです。あなたができる最善のことは警戒することです、そしてあなたのサイトがこすられているのを見つけたら、問題のあるプログラムのIPをブロックしてください。

5
Bill the Lizard

検索エンジンは、定義上、スクリーンスクレイパーです。したがって、スクレイピングのスクリーニングを困難にするために行うほとんどのことは、コンテンツのインデックス作成も困難にします。

正常に動作するロボットは、robots.txtファイルを尊重します。また、既知の違反者のIPをブロックしたり、コンテンツが既知の優れたロボットに送信されていないときに、難読化されたHTMLタグをコンテンツに追加したりすることもできます。しかし、それは敗戦です。既知の犯罪者には訴訟ルートをお勧めします。

また、コンテンツ内の識別データを非表示にして、違反者の追跡を容易にすることもできます。百科事典は、著作権侵害者の検出と起訴を支援するために 架空のエントリ を追加することが知られています。

4
Chris Nava

それを防がないで、それを見つけて、試みた人々に報復してください。

たとえば、サイトを開いたままダウンロードして、正気のユーザーがたどらないリンクを広めます。誰かがそのリンクをたどったり、クリックが速すぎて人間やその他の疑わしい行動をとることができない場合は、ユーザーが試行するのを止めるために迅速に対応してください。ログインシステムがある場合は、ユーザーをブロックし、許容できない動作についてユーザーに連絡してください。それは彼らが再試行しないことを確認する必要があります。実際のページの代わりにログインシステムがない場合は、同じ警告への偽のリンクを含む大きな警告を返します。

これは、Safari Bookshelfのように、ユーザーがコードの一部や章をコピーして同僚にメールで送信することは問題ありませんが、本を完全にダウンロードすることはできません。誰かが自分の本をダウンロードしようとしたときにそれを検出し、アカウントをブロックし、彼がそれを再試行した場合に本当に問題が発生する可能性があることを犯人に示していると確信しています。

IT以外の例えを言えば、空港のセキュリティによって武器を飛行機に搭載することが困難になった場合、テロリストは過去のセキュリティをこっそりと盗むために多くの方法を試みます。しかし、試してみるだけで深刻な問題が発生するため、だれもこっそりと侵入する方法を見つけようとはしません。捕まって罰せられるリスクは高すぎます。同じことをしてください。可能なら。

3
Eric Darchis

ほとんどのスクリーンスクレイパーはHTMLからXMLではなくテキストとして機能するため(ほとんどのページは有効なXMLとして解析されないため)、投資収益率はおそらくランダムな改行と複数のスペースを追加することです。

ブラウザは空白を無視するので、ユーザーはそれに気づきません

  Price : 1
  Price :    2
  Price\n:\n3

異なっています。 (これは、AWKで政府のサイトをスクレイピングした私の経験から来ています)。

次のステップは、ランダムな要素の周りにタグを追加して、DOMを台無しにすることです。

3
Dave

防止しますか?-不可能ですが、もっと難しくすることができます。

意欲を削ぐ?-可能ですが、答えは気に入らないでしょう:利害関係者に大量のデータエクスポートを提供します。

長期的には、公開するとすべての競合他社が同じデータを持つため、ウェブサイトを多様化する他の手段が必要になります(たとえば、より頻繁に更新したり、より速く、より使いやすくしたりします)。今日、グーグルでさえユーザーレビューのようなスクレイピングされた情報を使用しています、あなたはそれについて何ができると思いますか?彼らを訴え、彼らのインデックスから起動しますか?

2
mjy

1つの方法は、テキストと位置を取得する関数を作成してから、サーバーサイドがテキスト内のすべての文字に対してx、y posを生成し、文字を含むランダムな順序でdivを生成することです。画面上の適切な場所にすべてのdivを配置するJavaScriptを生成します。画面上では見栄えがしますが、背後のコードでは、JavaScriptを介してスクレイプする手間をかけない場合、テキストをフェッチする実際の順序はありません(リクエストごとに動的に変更できます)

作業が多すぎて、おそらく多くの癖があります。それは、テキストの量や、サイトのUIの複雑さなどによって異なります。

2
Stefan

サイトの意図を考えると、情報を公開する(つまり公開する)ことはほとんどないと思います。

  • もちろん、ログインの背後にデータを隠すことはできますが、それは非常に状況に応じた解決策です。

  • リクエストヘッダーが(匿名または「ジャカルタ」と言うのではなく)Webブラウザーを示しているコンテンツのみを提供するアプリを見たことがありますが、それは簡単になりすまし、本物の人間を失うことになります。

  • 次に、一部のスクラップを受け入れても、同じIPからのリクエストの割合が高すぎる場合はコンテンツを提供しないことで、彼らの生活を乗り越えられないほど困難にする可能性があります。これは完全にカバーされていないという問題がありますが、さらに重要なことに、IPが多くの多くのユニークな人間のユーザーをカバーできるという「AOLの問題」があります。

最後の2つの手法はどちらも、トラフィックインターセプトテクノロジーを使用することに大きく依存しています。これは、必然的なパフォーマンスや費用です。

1
annakata

ほとんどのサイトが優れた検索エンジンランキングを望んでおり、検索エンジンはスクレーパーボットであることを考えると、SEOに害を及ぼさないようにできることはあまりありません。

完全にajaxがロードされたサイトまたはフラッシュベースのサイトを作成してボットを困難にしたり、ログインの背後にすべてを隠してさらに困難にしたりすることができますが、これらのアプローチのいずれかが検索ランキングを傷つけ、場合によっては迷惑になりますあなたのユーザー、そして誰かが本当にそれを望んでいるなら、彼らは方法を見つけるでしょう。

削ることができないコンテンツを持つ唯一の保証された方法は、それをウェブ上に公開しないことです。ウェブの性質は、あなたがそれをそこに出すとき、それはそこにあるというようなものです。

1
seanb

保護したい情報があまりない場合は、その場で画像に変換できます。次に、OCRを使用する必要があります。これにより、自分のサイトではなく別のサイトを簡単に取得できます。

1
Stefan

あなたはあなたのサイトに来るクライアントのユーザーエージェントをチェックすることができます。一部のサードパーティのスクリーンスクレイピングプログラムには独自のユーザーエージェントがあるため、それをブロックできます。ただし、優れたスクリーンスクレイパーは、ユーザーエージェントをスプーフィングするため、検出できません。正当なユーザーをブロックしたくないので、誰かをブロックしようとする場合は注意してください:)

あなたが望むことができる最善のことは、ユーザーエージェントを変更するのに十分賢くないスクリーンスクレイパーを使用している人々をブロックすることです。

0
Alex

いくつかのPDFファイルを一度「スクリーンスクレイピング」しようとしましたが、実際には文字がPDFの半ランダムな順序で配置されていることがわかりました。 PDF形式では、テキストの各ブロックの場所を指定でき、非常に小さなブロック(Wordよりも小さい)を使用していたと思います。問題のPDFはそうではなかったと思います。レンダリングエンジンで何か変なことをしているので、画面のスクレイピングを防止しようとしています。

そんなことができるかな。

0
Paul Tomblin

すべてをフラッシュに入れることもできますが、ほとんどの場合、私も含めて、多くの正当なユーザーを悩ませます。株価やグラフなどの情報に使用できます。

0
too much php

iTextライブラリ を使用してデータベース情報からPDFを作成するのはどうですか? Flashと同様に、スクレイピングが不可能になることはありませんが、少し難しくなる可能性があります。

ネルス

0
Nels Beckman

さて、サーバーからクライアントにコンテンツをプッシュする前に、すべての\ r\n、\ n、\ tを削除し、すべてを1つのスペースだけに置き換えます。これで、htmlページに1つの長い行ができました。 Googleはこれを行います。これにより、他の人があなたのhtmlやJavaScriptを読みにくくなります。
次に、空のタグを作成して、あちこちにランダムに挿入できます。効果はありません。
次に、すべてのIPと、それらがサイトにアクセスする頻度をログに記録できます。毎回時間通りにやってくるものを見つけたら、それをロボットとしてマークしてブロックします。
検索エンジンを導入したい場合は、検索エンジンをそのままにしておいてください。
お役に立てれば

0
un33k

古い質問ですが、インタラクティブ機能を追加すると、画面のスクレイピングがはるかに困難になります。データが元の応答にない場合、たとえば、ページの読み込み後にdivにデータを入力するAJAXリクエストを行った場合、ほとんどのスクレーパーはそれを認識しません。

たとえば、私は機械化ライブラリを使用してスクレイピングを行います。 MechanizeはJavascriptを実行しません-それは最新のブラウザではありません-HTMLを解析するだけです、リンクをたどってテキストを抽出しますなど。Javascriptを多用するページに出くわすたびに、完全にスクリプト化せずに窒息しますブラウザ(Javascriptの全範囲をサポートします)私は立ち往生しています。

これは、高度にインタラクティブなWebアプリケーションの自動テストを非常に困難にするのと同じ問題です。

0
Matt Luongo

Print Screenを防ぐことができるとは思ってもみませんでした...よく知っていることですが、新しい技術であるsivizion.comをチェックしてください。彼らのビデオバッファ技術では、使用するのは難しいですが、印刷画面をクールで本当にクールにする方法はありません...私は彼らも技術をライセンスしていると思います、それをチェックしてください。 (私が間違っている場合は、ハッキングの方法をここに投稿してください。)ここで見つけました: Print Screenを防ぐにはどうすればよいですか

0
Tom

良いこれを行う方法はないと思います。

テキストをCAPTCHAスタイルのフォントとレイアウトを使用してレンダリングされた画像に変換するメカニズムを介してすべてのコンテンツを実行できると思いますが、それはSEOを壊し、ユーザーを苛立たせます。

0
Adam Jaskiewicz