17

Google App Engine を使用してサイトを構築します。私の公開サイトには何千もの写真が含まれています。これらの写真をクラウド (Google ストレージ、Amazon S3、または Google App Engine BlobStore) に保存したいと考えています。問題は画像のホットリンクです。

  1. Google Storage については、Google で検索しましたが、画像のホットリンクを防ぐ方法が見つかりません。(私はそのコマンド ライン ツール gsutil がとても気に入っています)

  2. Amazon S3 には、期限切れの画像 URL を生成する「クエリ文字列認証」があります。しかし、これはSEOにとって非常に悪いことですよね?URL を絶えず変更すると、画像とそれに関連する URL を Google 画像に取り込むのに 1 年以上かかるため、非常に悪影響があります。この URL を変更すると、GoogleBot が話しかけてきたときにすぐに悪影響が及ぶことは間違いありません。(更新: リファラーによる Amazon S3 でのイメージのホットリンクを防止するより良い方法は、バケット ポリシーを使用することです。詳細はこちら: http://www.naveen.info/2011/03/25/amazon-s3-hotlink-prevention-with-bucket -ポリシー/ )

  3. Google App Engine BlobStore? Web インターフェイス経由で画像を手動でアップロードする必要があり、変化するURLも生成します. (更新: Blobstore について無知なため、間違いを犯しました。Google App Engine BlobStore を使用すると、任意の URL を使用して必要な画像を提供できます。 )

必要なのは、単純なリファラー保護です。リファラーが自分のサイトである場合にのみ画像を表示します。

画像のホットリンクを防ぐためのより良い方法はありますか? クラウド帯域幅のコストが非常に高いため、破産を申請したくありません。

アップデート:

3つから選択するのはまだ難しいですが、それぞれに長所と短所があります.BlobStore が究極の選択のようです。

4

4 に答える 4

7

最も簡単なオプションは、blobstore を使用することです。必要なアップロード インターフェースを提供できます (それを作成するのはユーザー次第です)。ブロブストアはダウンロード URL を制限せず、アップロード URL のみを制限します。適切なヘッダーを設定するだけで、任意の URL でブロブストアの画像を提供できます。また、 を使用get_serving_urlして組み込みの高速画像提供サポートを利用することもできます。これにより、暗号化されているが一貫した URL が生成されます (ただし、リファラー チェックは実行できません)。

ただし、これが実際に直面している実際的な問題であるかどうかを検討することをお勧めします。いくつかのホットリンクされた画像によって消費される帯域幅は、今日の基準ではごくわずかであり、そもそもこれは特に一般的な方法ではありません。@sharth がコメントで指摘しているように、画像検索は画像をホストするページへのリンクに加えて、独自のウィンドウに画像を表示する傾向があるため、SEO にも影響を与える可能性があります。

于 2011-07-04T01:46:33.110 に答える
1

統計 Web サービスのコーディングに戻ると、画像とグラフを動的に生成する必要がありました。生成される画像は、リクエスト パラメータ、データ リポジトリの状態、および一部のヘッダー情報によって異なります。

したがって、もし私があなたなら、画像を提供するための REST Web サービスを作成します。それほど難しくありません。特定のIPアドレスが気に入らない場合は、データリクエストの画像ではなく、舌を出した漫画(または爆弾を受けながら踊るOBLサンバのアニメーションGIF)を表示できるため、かなりくすぐったいです.

あなたの場合、http ヘッダーでリファラー (またはリファラー) を確認しますよね? httpヘッダーのリファラーフィールドを隠したり、空白にしたり、偽造したりすることができるので、私は疑わしいです。

そこで、リファラーフィールドをチェックするだけでなく、値が変化するデータフィールドを作成します。値は、単純な値の一致である可能性があります。

第二次世界大戦中、ルーズベルトとチャーチルは暗号化を使用して通信しました。それぞれが同じディスクのスタックを持っていましたが、これには暗号化メカニズムが何らかの形で含まれていました。それぞれの会話の後、2 人ともディスクを破棄し (そして再利用することはありませんでした)、次回の会話時にスタック上の次のディスクに到達できるようにします。

ディスクのスタックの代わりに、イメージ コンシューマーとイメージ プロバイダーは同じ 32 ビット トークンのスタックを保持します。32 ビットでは、10 分間で最大 40 億の期間が得られます。スタックはランダムに並べられます。「ランダム ジェネレーター」は真のランダムではなく、十分に長いシーケンスが提供された場合に予測できる方法で実際にアルゴリズム化されていることはよく知られているため、「真のランダム ジェネレーター」を使用するか、毎週スタックを再シーケンスする必要があります。

待ち時間の問題により、プロバイダーは現在の期間、最後の期間、および次の期間からのトークンを受け入れます。ここで、期間 = セクター。

ブラウザ上の ajax クライアント (おそらく gwt) は、サーバーから 10 分ごとに更新されたトークンを取得します。ajax クライアントは、そのトークンを使用して画像を要求します。イメージ プロバイダー サービスは古いトークンを拒否し、ajax クライアントはサーバーから新しいトークンを要求する必要があります。

これは防火方法ではありませんが、飛散防止であるため、スパムリクエストの数を減らす/思いとどまらせることができます (ほぼゼロになると思います)。

「真にランダムな」シーケンスを生成する方法は、やはり手早く汚いものです。さらに、シーケンスの値を手動で並べ替えたり削除したりして、数分モンキーレンチを手動で投入することにより、アルゴリズムで生成された「ランダムな」シーケンスに取り組みます。それは、アルゴリズムの予測可能性を台無しにします。おそらく、モンキーレンチスロワーを書くことができます。しかし、アルゴリズム モンキー レンチ ストライカーは、予測可能なアルゴリズムを別の予測可能なアルゴリズムの上に追加するだけで、全体的な予測可能性をまったく低下させません。

巡回冗長マッチングを迅速で汚い「暗号化された」トークンマッチングメカニズムとして採用することで、状況をさらに強迫的に制限することができます。

等間隔の 8 つのセクターに分割された円があるとします。8 セクターすべての誰にでもアドレス指定できるようにするには、3 桁の 2 進数が必要です。各セクターがさらに 8 つのサブセクターに分割されていると想像してください。これにより、各サブセクターを追加の 3 バイトでアドレス指定できるようになり、合計 6 バイトになります。

10 分ごとに一致する値を変更する予定です。イメージ プロバイダーと承認されたすべてのコンシューマーは、セクター アドレスの同じスタックを持ちます。10 分ごとにセクター アドレスを破棄し、次のセクター アドレスを使用します。コンシューマーがプロバイダーに一致する値を送信する場合、セクター アドレスではなくサブセクター アドレスが送信されます。そのため、プロバイダーが現在受け入れられているセクターに属するサブセクター アドレスを受け取る限り、プロバイダー サービスは正しいイメージで応答します。

ただし、サブセクター アドレスは、難読化シーケンス アルゴリズムによって再マップされます。同じセクタ内の各サブセクタ アドレスがまったく似ないようにします。このように、すべてのブラウザーが同じトークン値または非常に類似したトークン値を受け取るわけではありません。

16 ビットのセクター アドレスがあり、各セクターには 16 ビットのサブセクター アドレスがあり、32 ビットのトークンを構成しているとします。つまり、同じトークン セクターを運ぶ 65536 の同時ブラウザー クライアントを使用する余裕がありますが、2 つのトークンが同じ低い予測可能性の値を持つことはありません。すべてのセッション ID にトークン サブセクター値を割り当てることができるようにします。イメージ プロバイダー サービスに対して 65536 を超える同時セッションがない限り、2 つのセッション ID が同じサブセクター トークン アドレスを共有する必要はありません。そうすれば、スパマーがセッション ID を偽造する機器/施設にアクセスできない限り、サービス拒否攻撃以外にイメージ プロバイダーがスパミングされることはありません。

予測可能性が低いということは、スヌーパーやのぞき見をする人が許容できるトークンを作成して画像プロバイダー サービスにスパムを送信する可能性が低いことを意味します。

確かに、通常のボットは成功することができません - ANNONYMOUS グループを本当に怒らせ、彼らが純粋な楽しみからあなたのサーバーにスパムを送信することに決めた場合を除きます。それでも、モンキー レンチをセクター アドレス スタックとサブセクター マップに投入したとしても、次のトークンを予測することは非常に困難です。

ところで、Cyclic Redundancy マッチングは実際にはエラー訂正技術であり、暗号化技術ではありません。

于 2011-07-02T03:23:05.127 に答える
0

オタクのエッセイのより単純なバージョンで、Google アプリ エンジンでハンドラーを作成して、画像をフェッチしてサーバーに送信します。ヘッダーを変更してpngなどを指定できますが、別の場所から画像を返しています。その後、ハンドラーでリクエスト リファラー情報を調べて、誰かがそのイメージに「ホットリンク」されてアクセスしようとしている場合は、適切なアクションを実行できます。もちろん、実際の画像を公開することはないため、ホットリンクは不可能です。=)

于 2011-07-02T16:45:01.950 に答える
0

File API はまだ実験段階であることを知っておく必要があります。この問題を確認してください。

http://code.google.com/p/googleappengine/issues/detail?id=6888#c20

Blobstore から Amazon S3 に移行するスタートアップに取り組んでいます

于 2012-03-20T14:59:44.253 に答える