人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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の画像を表示させられるので有れば、その方法でもかまいません。

●質問者: ymizunuma
●カテゴリ:コンピュータ インターネット
✍キーワード:.jpg CGI HTML WWW XXXX
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● killingofthedead
●60ポイント

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

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

◎質問者からの返答

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

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

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を返さない設定のユーザーには画像が表示されないことが分かりましたので、他に方法がないかもうすこし探してみます。


2 ● peugeot
●10ポイント

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

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

#!/bin/sh

echo Content-type: image/gif

echo

cat /var/www/picture/image.gif

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ