Websiteの画像に直接アクセスできなくする設定はありますか?(別サイトからの直リンクではありません)


具体的には
/var/www/html
がルートディレクトリのhttp://www.example.com の場合で、
/var/www/html/picture
の/picture 内の画像に直接アクセスして
http://www.example.com/picture/xxxx.jpg
と入力されてもxxxx.jpgを表示させない方法を探しています。
/picture内の画像は
http://www.example.com/cgi-bin/abc.cgi?p=xxxxという場合にだけ表示させたいのです。

最初は安易に、/var/www/pictureを設定して、cgiで自動で画像を/pictureにアップしたのですが、画像のアップロードには成功した物の../../pictureと相対パスで読み込ませようとしても、/picture内の画像は表示されませんでした。
もし/var/www/pictureの画像を表示させられるので有れば、その方法でもかまいません。

回答の条件
  • 1人2回まで
  • 登録:2008/02/06 14:33:15
  • 終了:2008/02/09 17:21:40

回答(2件)

id:killingofthedead No.1

killingofthedead回答回数18ベストアンサー獲得回数42008/02/06 14:48:13

ポイント60pt

通常、ウェブページ上で画像を表示する場合、

HTMLファイル取得→画像ファイル取得という流れになり、

画像ファイル取得時にはHTMLファイルのパスがリファラに設定されます。


ですので、/var/www/html/picture下の画像ファイルを取得するとき、

リファラがhttp://www.example.com/cgi-bin/abc.cgiでなければならない、

という設定をすればよいのではないでしょうか。


例えば、httpd.confなどに以下のような設定をすれば実現すると思われます。

※下記コードは未検証です。


SetEnvIf Referer /cgi-bin/abc\.cgi ref

<Directory /var/www/html/picture>

Order Deny,Allow

Deny from all

Allow from env=ref

</Directory>


参考URLは次の通りです。

http://httpd.apache.org/docs/2.0/ja/mod/mod_access.html

id:ymizunuma

迅速な回答ありがとうございます。

回答をそのまま使用したらサーバエラーが発生しましたので、

SetEnvIf Referer "example\.com/cgi-bin/abc\.cgi" ref

Order Deny,Allow

Deny from all

Allow from env=ref

の様に変更したところ、Apache 1.3.xのサーバでは希望通りの設定となりましたが、今回メインで使いたいApahe 2.0.xのサーバでは効果が有りませんでした。この点はサーバ会社と連絡を取り合っている途中です。

それと、回答を頼りにぐぐって見たら、ノートンなどでRefererを返さない設定のユーザーには画像が表示されないことが分かりましたので、他に方法がないかもうすこし探してみます。

2008/02/07 08:22:07
id:peugeot No.2

peugeot回答回数131ベストアンサー獲得回数52008/02/07 00:20:35

ポイント10pt

CGIでcontent-typeを直接指定することも可能です。

以下は簡単な例ですが、クエリストリングから表示画像を切り替えたりアクセス元が外部(ローカルのコンテンツ外)の場合にはCGIにて画像を表示させない等応用が可能かと思います。

#!/bin/sh

echo Content-type: image/gif

echo

cat /var/www/picture/image.gif

id:ymizunuma

今回のケースには該当しないとおもいますが、こうした手法があるのは知りませんでした。

2008/02/09 17:20:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません