中田さん
そうですか、分かりました。
いろいろと教えて頂きありがとうございました。
Imamura さん、
HTTPプロトコルというのは基本的にはそれぞれのアクセスが独立しています。
つまり、前にアクセスした記録などは残らないので、HTTPサーバだけでは難しいでしょう。
Zawaja さんの例のように CGIで HTTP_REFERER を使うというのもありますが、HTTP_REFERER は偽造や改変が可能なので、すり抜けられます。
URLがわかっているCGIに使用制限をかけるには、ユーザ認証などを使わざるを得ないと思います。
Zawajaさん
すいません。あまりCGIに詳しくないもので・・・。
CGIに記載すればよいことなんでしょうがAN HTTPDでできればなぁと思いまして。
Imamuraさん
それってCGIスクリプト側に参照元を取得するプログラムを書き込めば対処できることなのではないでしょうか?
(あまりいいスクリプトではないのですが)以下はPerlの場合の例だと
# アクセス許可参照元みたいな形で。
$ref_url1 = 'http://aaa.hoge.jp/zawaja/(.*)';
$ref_url2 = 'http://bbb.hoge.com/(.*)';
$ref_url3 = 'http://cdma.foo.net/bar/(.*)/hoge/(.*)';
# 参照元の判定
my($ref) = $ENV{'HTTP_REFERER'};
$ref =~ tr/+/ /;
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if(($baseDir) && (!(($ref =~ /$HthisFile?Sight=([0-9]*)/i)
|| ($ref =~ /$ref_url1/i)
|| ($ref =~ /$ref_url2/i)
|| ($ref =~ /$ref_url3/i)))) {
# エラー表示
errorout();
# 終了
exit();
中田さん
早速のご回答ありがとうございます。
ただちょっと意味が違ったので例で説明しますと、
バーチャルホストで「abc.co.jp D:\http1」、「def.co.jp D:\http2」として
「abc.co.jp」アクセスするとD:\http1の中にあるのが表示されますがabc.co.jpにおいてあるファイルからしかCGIなどを実行できないようにしたいのです。
たとえば「http://abc.co.jp/cgi-bin/bbs/bbs.cgi」とあったとして
「http://def.co.jp」から「http://abc.co.jp/cgi-bin/bbs/bbs.cgi」を開こうとしても拒否して「http://abc.co.jp」からは許可するようなふうにできないかということです。
これができれば外部からの不正なフォームメールCGIの使用が出来なくなるので。
ご回答よろしくお願いします。
Imamura さん、
「バーチャルホストみたいに」という意味がちょっとよくわかりませんが、、、
IPアドレス(やホスト名)からメールアドレスはわかりませんから、ユーザ認証を使うくらいしかないと思います。
ホスト名によるアクセス制限ならできますが。。。
http://homepage1.nifty.com/yito/anhttpd/faq/access-ctrl.html
を見て下さい。
意味が違うようなら、もう少し具体的に例をあげて説明してみてください。
こんにちは
さっそくですがバーチャルホストみたいにアクセスしてきたアドレスしか許可するようにできないでしょうか?
他のアドレスからフォームメールのCGIを使われるのを防ぎたいので。
お願いします。