2009-11-19 5 views
11

サーバー上のJSON型サービス(AJAX関数を提供することを意図している)を介して公開されるデータが外部エージェントによって収穫される可能性を減らすための技術。AJAX/JSONサービスからのデータ収集を減らす手法

Flashクライアントがデータを消費していると言うと、問題はそれほど難しくありません。その後、暗号化されたデータをクライアントに送信することができます。クライアントは暗号化されたデータを解読する方法を知っています。しかし、Javascriptのソースが公開されているため、AJAXでは同じ方法が不可能と思われます。

誰もがここで巧妙な技術を実装していますか?

どのような方法であっても、本物のAJAX関数がデータを消費できるようにする必要があります。

私はここで「機密情報」の保護について話しているわけではないことに注意してください。漏出する奇妙な記録は問題ではありません。むしろ、私はDB全体がボットによって(一度に、あるいは徐々に)引き上げられる状況を止めることを考えています。

ありがとうございました。

答えて

7

まず、私はこれを明確にしたいと思います:

それは私には思えるあなたはフラッシュ クライアントがデータを消費すると言っていた場合、問題が それほど難しいことではないということ。その後、 は の暗号化データを の復号化方法を知っている クライアントに送信できます。同じ方法は がAJAXで不可能だと思われますが、 のため、Javascripのオープンな性質 ソースがあります。

それは難しいあなたのフラッシュはこのために使用されて何のプログラムをコンパイルしたから、攻撃者が見つけるためにのためにということではありません情報をフラッシュクライアント&に暗号化されて送信されて、かなり明白であろう - &がすべて取得複製そのデータ。

データにあなたが考えている価値がある場合は、上記を参考にすることができます。

これが公開情報の場合、&はそれに対抗しないでください。代わりに、それを活用する方法を見つけてください。

これは、ユーザーのセットにしか公開されていないという情報であれば、対応する認証/安全な通信があることを確認してください。他の人が言ったように使用状況を追跡し、それに作用する措置を取る。

+2

"これが公開情報であれば、それを抱きしめて&対処しないでください。代わりにそれを活用する方法を見つけてください。 +1 –

+0

うん、その文だけで+1に値する。 – anddoutoi

1

内部にMemcachedボックスがある場合は、サーバーにヒットする各IPのエントリを時間単位で作成する方法を検討することができます。その後、IPがAJAXエンドポイントに当たるたびにその値を増やします。値が特定のしきい値を超える場合は、接続をフライします。値がMemcachedで期限切れになると、あなたはそれが「隠されていない」ことを知っています。

1

これはコンセプトの証明が付いた具体的な回答ではありませんが、出発点かもしれません。暗号化/復号化機能を提供するjavascript関数を作成することができます。 javascriptは動的に構築する必要があり、セッションに固有の暗号化キーを含める必要があります。サーバー側では、セッションのキーを使用してJSONを暗号化してから配信する暗号化サービスがあります。

これは、少なくとも、あなたのデータベースから情報を引き出して、あなたのウェブトラフィックを聞くことを妨げるでしょう。

私はkdgergoryだが、あなたのデータがあまりにも開いているように聞こえる。

7

ボットがデータを盗むのを防ぐための最初の方法は、技術的なものではなく、合法です。まず、サイトの利用規約に正しい言語を使用して、防止しようとしていることが実際には許可されておらず、合法的な立場から防御できることを確認してください。第二に、法的な問題を念頭に置いて技術戦略を立案してください。たとえば、米国では、認証バリアの背後にデータを置いて、攻撃者がそれを盗んだ場合、恐らくviolation of the DMCA lawとなります。第三に、IPとDMCAの問題についてアドバイスできる弁護士を探してください。StackOverflowの素敵な人たちでは不十分です。 :-)

今、テクノロジーについて:

合理的な解決策は、彼らはあなたの敏感なAjax呼び出しへのアクセスを得ることができる前に、ユーザーが認証されることを要求することです。これにより、Ajaxコールのユーザーごとの使用状況を監視し、特定の期間にリクエストが多すぎるユーザーのアカウントを(手動または自動で)取り消すことができます。 (もしあなたが細流のアプローチを防衛しようとしているなら、合計リクエストが多すぎる)。

このアプローチはもちろん、新しい「ユーザー」に自動的にサインアップする洗練されたボットには脆弱ですが、合理的に優れたCAPTCHAの実装では、この種のボットを構築することは非常に困難です。(http://en.wikipedia.org/wiki/CAPTCHAの「迂回」セクションを参照)

公開のデータ(認証なし)を保護しようとすると、オプションがはるかに制限されます。他の回答が記載されているように、IPアドレスベースの制限を試すことができます(また、大企業のプロキシユーザーにも悪影響を与えます)が、洗練された攻撃者は負荷を分散することでこれを回避できます。リクエストのタイミング、リクエストパターンなどを監視し、ボットを見つけようとするような、洗練されたソフトウェアもあります。例えば、ポーカーサイトはこれに多くの時間を費やしています。しかし、これらの種類のシステムが安価であるとは思わないでください。あなたのウェブログを採掘して(例えば、Splunkを使用して)、あなたのサイトに当たる上位N個のIPアドレスを見つけて、逆IP検索を行うことが簡単です。正当な企業またはISPの代理人になるものもあります。しかし、あなたがリストの中でcompeitorのドメイン名を認識した場合は、ドメインをブロックするか、弁護士にフォローアップすることができます。

盗難前の防御に加えて、「ハニーポット」を挿入することも考えられます。後で追跡できる情報を意図的に偽装することです。これは、例えば、地図メーカーが偽りをキャッチする方法です。偽の通りを地図に挿入し、同じ偽の通りを示す他の地図を確認します。これは決まった人々があなたのすべてのデータを吸うことを妨げるわけではありませんが、あなたのデータを誰が再利用しているのかを後で知ることができます。これは、テキスト出力に一意のテキスト文字列を埋め込み、後でGoogleでそれらの文字列を検索することで行うことができます(あなたのデータは別の公開ウェブサイトで再利用可能であると仮定します)。あなたのデータがHTMLまたは画像の場合、あなたのサイトを指し示す画像を含めることができます。また、誰がそれをダウンロードしているのかを追跡し、フリーローダーを破棄するために使用できるパターンを探すことができます。

他の回答の1つに記載されているJavaScriptの暗号化アプローチは、認証されていないセッションでは機能しません。攻撃者は通常のブラウザのようにjavascriptをダウンロードして実行できます。ストーリーの道徳的:公共のデータは本質的に不可能です。データを保護し続けるには、認証バリアの背後に置いてください。

これは明らかですが、あなたのデータが検索エンジンで一般公開されている場合は、それらには非AJAXソリューションが必要です(Googleはあなたのajaxデータを読まないでしょう)ページNOARCHIVEをご覧ください。データはGoogleのキャッシュに表示されません。また、検索エンジンのクロール可能なページ(Google、Bing、Yahooなどと連携してこれらを取得できる)に許可する検索エンジンのクローラIPアドレスのホワイトリストが必要な場合もあります。そうしないと悪意のあるボットが単に偽装する可能性がありますGoogleとあなたのデータを取得します。

結論として、私は上記の@kdgregoryをエコーし​​たい:脅威が必要な努力の価値があるほど十分であることを確認する。多くの企業は、他の人々(正当な顧客と悪意のある俳優の両方)がビジネスに持つ関心を過大評価しています。あなたが特に重要なデータを持っていて、貴重な情報を入手し、誰かがあなたのデータを盗んだ場合、あなたの法的償還は制限されます。しかし、一緒になってみれば、異例のことは間違いありません。

P.S. - あなたのケースでは当てはまらないかもしれないこの問題について考える別の方法。場合によっては、データの保護方法を変更することで、データの保護方法を変更する方が簡単な場合もあります。たとえば、サイトのサービスに何らかの方法でデータを結びつけて、コードと組み合わせて使用​​しない限り、データがあまり役に立たないようにすることができます。それとも広告を埋め込むことができるので、どこに表示されていても報酬を受け取ることができますか?等々。これらの緩和策のいずれかがあなたのケースに当てはまるかどうかはわかりませんが、多くの企業はインターネット上で無料で物を提供し(そして広範囲の再配布を防ごうとするのではなくむしろ励ます) /あなたのケースでは有料の戦略が可能かもしれません。

+0

法的枠組みを引用し、開発者を保護しようとすることによって、技術界に非常に不快感を与えることは間違いありません。それは80年代の音楽配信を奨励している録音業界のようなもので、2000年代にはユーザ配布技術がロスレスになったときに、世代全体を律法違反者とみなしてラベル付けしています。パブリックデータを公開する場合は、他人に見せたくない場合は、それをロックしてください。事後の利用規約に従っている人を追いかけてはいけません。 –

+0

私は同意する、法律は良い技術的な解決策を見つけていないための言い訳ではありません。実際には、私の「法的な」提案には具体的なシナリオがありました。確かな資金提供を受けた競合他社(多くの個人ユーザーではない)が、あなたが置いた技術的なロードブロッキングに関係なく、すべてのデータを盗み出すことにしたら、あなたがそれらを止めるために法的な支配力を持っていなければ。私は、この問題やこれに類するものに対するレコード業界のアプローチを支持するつもりはありませんでした。 –

+0

あなたに知らせてください - 私はこれを受け入れられた答えとしてマークしましたが、残念ながら賞金終了時にコンピュータから離れていました。 – UpTheCreek

1

一部の技術はFurther thoughts on hindering screen scrapingにリストされています。

PHPを使用している場合は、Bad behaviorが役に立ちます。 PHPを使用しない場合は、フィルタリングの仕方についてのアイデアを得ることができます(How it worksページを参照)。

Incredibill's blogは素敵なヒントを与えている、ユーザーエージェント/ IPのリストはなど、ブロックするように範囲...ここ

+0

ありがとう、良い提案があります。 – UpTheCreek

1

は、提案の多様です:各とともに償還に必要な

  1. 発行トークンAJAXリクエスト。トークンを期限切れにする。
  2. 各クライアントからのクエリの数を追跡し、予想される通常のサイト使用状況に基づいて過剰な使用を抑制します。
  3. シーケンシャルクエリ、要求のスパイク、または人間が実行できるよりも速く発生するクエリなどのパターンを探します。
  4. ユーザーエージェントを確認してください。多くのボットは、ブラウザのユーザーエージェント情報を完全に複製するわけではなく、この方法を使用してデータのプログラムによるスクレイピングを排除することができます。
  5. 要求のしきい値を超えたら、ウェブサイトのフロントエンドコンポーネントを変更して、キャプチャ(または他の人の検証メカニズム)にリダイレクトします。
  6. 構文解析に必要なコードを複雑にするために、respsonseデータがいくつかの異なる方法で返されるようにロジックを変更します。
  7. あなたのクライアントサイドのjavascriptをObsfucateしてください。
  8. 問題のクライアントのIPをブロックします。
0

ボットは通常、JavaScriptを解析しないため、あなたのajaxコードは即座に実行されません。彼らがしても、ボットは通常セッション/クッキーを維持しません。そのことを知っていれば、有効なセッション/クッキーなしで呼び出された場合にリクエストを拒否することができます(これは、親ページのリクエストによってあらかじめサーバー側で設定されています)。

これはあなたを人の危険から守るものではありません。最も安全な方法は、ログイン/パスワードでユーザーへのアクセスを制限することです。それがあなたの意図でない場合は、の公開アプリケーションである必要があります。もちろん、IPアドレスやユーザエージェントを使ってログやメインティックブラックリストをスキャンすることもできますが、それは極端になります。

関連する問題