2011-08-08 8 views
1

多くの他のサーバーにあるhtml文書で参照されている、私たちのサーバーからの画像ファイルを提供することを任されました。 foo.com上HTTP要求がスクリプト化されていない場所を確実に知ることは可能ですか?

ファイル:ウィットに
<img src='http://bar.com/image.jpg'>

ユーザーがFOO.COMに行く、それが当社のサーバー、bar.comからの画像を表示します。 (実際には、どのウェブサイトがリクエストを出したかに基づいて別のイメージを送信します)。

しかし、ここでは特定の企業の訪問者がファイルを取得できるようにしたいと考えています要件ではありません)。

完璧な世界では、HTTP_REFERERを見て、それが承認済みリストにある場合はファイルを提供してください。しかし、誰もが知っているように、すべてのユーザーエージェントがHTTP_REFERERを提供しているわけではなく、とにかくスプーフィングされる可能性があります。

javascriptやphpを実行する必要はありませんが、スクリプトを作成しなくても可能ですか?

もしそうでない場合は、別のウェブサイトがファイルをダウンロードすることができないようにjavascriptだけでこれを行う方法がありますか?

もしそうでなければ、PHPを使ってどのようにアプローチしますか?

+0

あなたはファイルをダウンロードするウェブサイトについて話していますか?ファイルは、Webサイトではなく、ブラウザでクライアントによってダウンロードされます。ページ、スクリプト、画像などの各HTTPリクエストは、ブラウズしているWebサイトではなく、ユーザーのブラウザからの個別のリクエストです。 –

+0

サーバーからサーバーへのダウンロードも可能です。しかし、OPはちょうど "ダウンロードを認証するには良い方法は何で"と尋ねたいと思うのですか? – Evert

+0

ええ、ユーザーエージェントはダウンロードを行い、最終的にはHTTP_REFERERで信頼できないという問題があります。私は認証されたダウンロードを望まない。私は、「ホワイトリストに載っている」サーバーのパブリックユーザーはイメージを見ることができるが、他のサーバーは見せないようにしたい。 – pbarney

答えて

3

承認された企業のウェブアプリに影響を与えますか?もしそうなら、私はあなたがこれを達成できる2つの方法を考えることができます。代わりに、サーバーへの要求を行うブラウザの

1)を、それらが作る持っている:bar.comがサーバーであるあなたのfoo /バー例を、使用し、foo.comはあなたの承認企業の一つである

foo.com上のイメージハンドラへのリクエスト。バックグラウンドでサーバーにHTTPリクエストを行い、イメージの内容をクライアントに返します。 Fooの送信IPアドレスはサーバ上のホワイトリストにあるので、すべてのリクエストはFooのIPアドレスから実際に送信されます。クライアントは見るでしょう:fooはあなたのサーバに要求を行うことができない場合

<img src="http://foo.com/imagehandler.php" /> 

2)はるかに難しいが、しかし、fooが画像タグのクエリ文字列に特別なハッシュを置くことができますブラウザが行ったときになるようにサーバーにリクエストすると、URLがFooによって作成されたことがわかります。ハッシュを計算できるように、Fooのサーバーにプライベートキーが必要です。

私は、ハッシュがブラウザのIPアドレス、現在の日付/時刻、秘密鍵の組み合わせに基づいて計算されると思います。

ので、ブラウザはfoo.com/default.phpを要求するだろう、とFooのは、ブラウザのため、次の画像タグを構築します:

その数は適切なハッシュを表し
<img src="http://bar.com/imagehandler.php?hash=393923A423B423F234C34" /> 

。 Barのイメージハンドラコードでは、FooとBarのみが知っている秘密鍵、GET要求の一部であるIPアドレス、現在の日付/時刻に基づいてそのハッシュを再計算する必要があります。ハッシュが一致すれば、ブラウザがfoo.comのウェブサイトを見ていることをかなり確信で​​き、イメージのコンテンツを返すことができます。

3

要するに、信頼できる唯一の情報は、イメージを要求したIPアドレスですが、プロキシであっても可能です。 の文脈が要求された画像(つまり、画像が埋め込まれているHTMLページ)を確認する信頼できる方法はありません。

あなたが望むのは、特定の人だけが画像にアクセスできるようにすることです。それを行うには、2つの方法があります。それがわかっている場合

  • フィルタは、IPアドレスを要求することにより、
  • は、あなたのウェブサーバ場合は、パスワードはイメージを保護

すなわち、認証されたセッション/クッキー/ Authorizationヘッダーを必要としますこれらのチェックのいずれかをサポートしています(ほとんどのサーバーがIPでリクエストをフィルタできます)ので、スクリプト作成の必要はありません。パスワード認証のためには、どのように動作する必要があるかによって、スクリプトを使用する必要があります。

(クライアント側)ここではJavaScriptを一切使用しません。

関連する問題