電子書籍の厳選無料作品が豊富!

ISPにwakwakを使用しているのですが、cgi-binディレ
クトリ配下に置いてある掲示板に対してアクセス制限
をかける方法が無いか探しています。

wakwakの仕様で

・cgiはcgi-binディレクトリ配下にのみ設置可
・htaccessはcgi-binディレクトリ配下では動作不可

というようになっておりお手上げ状態です。
htaccessで制限出来るディレクトリにリンク用のhtml
を置いて、そこからじゃないとcgiディレクトリに飛べ
ないようにすればと思ったのですが、どうもcgi-bin
ディレクトリ(というかCGIに対して)直接アクセス制限
が出来るものが見つからず困っております。

どなたかお詳しい方がいらっしゃいましたらヒントだけ
でも頂けると幸いです。

A 回答 (5件)

>auth.cgiに記述するのはドメイン名(例えば自分の環境


であればusen.ad.jpですが、実運用を考えると*usen.
ad.jpのような指定)でも可能でしょうか?

ということは、追加すべき点は
 ・IPアドレスではなくホスト名での指定にする
 ・全体一致ではなく後方一致条件にする
の2点ですね。

まず
print "Status: 204\n\n" if(!/^$ENV{'REMOTE_ADDR'}$/);

print "Status: 204\n\n" if(!/^$ENV{'REMOTE_ADDR'}$/ || !/^$ENV{'REMOTE_HOST'}$/);
で、「特定のホスト名またはIPアドレスからのアクセスのみ受け付ける」という意味になります。

さらに、
print "Status: 204\n\n" if(!/^$ENV{'REMOTE_ADDR'}$/ || !/^$ENV{'REMOTE_HOST'}$/);

print "Status: 204\n\n" if(!/$ENV{'REMOTE_ADDR'}$/ || !/$ENV{'REMOTE_HOST'}$/);
で、後方一致に対応します。

この際、auth.cgiには「*」などを付けずに
 .usen.ad.jp
と記述しておけば
 abc1234.usen.ad.jp
などにマッチします。

この一致条件の設定については正規表現について勉強してみるといいでしょう。
http://www.tohoho-web.com/wwwperl1.htm#Expr

* * *

ちなみに、$ENV{'REMOTE_HOST'}はサーバーの設定によっては取得できないことがあります。
その場合はgethostbyaddr関数を使ってみてください。

gethostbyaddrの使い方は下記URLに詳しいです。

参考URL:http://www.tohoho-web.com/wwwperl2.htm#gethostby …
    • good
    • 0
この回答へのお礼

ここまでお付き合い頂いて本当にありがとうございま
した。
暫定的に作ったものが動作をしたので、さらに詳しく
調べて自分なりのものを作ってみようと思います。

お礼日時:2005/03/06 00:07

さらに補足です。



>詳しい書き方が書いてあるHPをご存知でしたらご紹介頂けると幸いです

先ほどの回答で説明したcookieを使った作例を見つけましたのでURLを貼っておきます。
作例では画像を表示する/しないの制御を行ってますが、cookieまわりの動作は参考になると思います。

また、ちょっと改造すれば入力したユーザー名を取得してそれによって動作を変えたりとかも可能でしょう。

参考URL:http://www.aimix.jp/cgi/acccookiepas.html

この回答への補足

本当にありがとうございます。

図々しいですが最後に一点だけ質問をさせて
下さい。

auth.cgiに記述するのはドメイン名(例えば自分の環境
であればusen.ad.jpですが、実運用を考えると*usen.
ad.jpのような指定)でも可能でしょうか?

であればローカル色が強いISP利用者と固定IPで接続
している利用者が多いのでなんとか実用に耐えると
思っているのですが・・・。

補足日時:2005/03/04 21:45
    • good
    • 0

>正規に利用しているメンバーは限られているので指定した


>ドメイン以外は拒否(=指定ドメインのみ許可)という
ふうには出来ませんでしょうか?

出来ます。
先ほど載せたコードの
print "Status: 204\n\n" if(/^$ENV{'REMOTE_ADDR'}$/);
の部分を
print "Status: 204\n\n" if(!/^$ENV{'REMOTE_ADDR'}$/);
にするだけです。

# ただしIPアドレスが固定でない環境では接続するたびに
# 新しいIPアドレスを管理者に教えてアクセス可能にしてもらう、、
# といった運用が必要になり非効率で非現実的ですが。


>#この方法だとユーザー名パスワード認証等は出来ないのですよね?

そうですね。
その場合はログインページを別に作って、ログイン成功したらcookieにログイン成功した旨の情報を埋め込み、掲示板CGIではそのクッキーを読み出してログイン状態を見て表示してやるという方法が考え付きます。
    • good
    • 0

CGIで動作しているのアクセス制限をしたいのですね?



それはCGIのプログラム中で対策できます。
Perlなら以下のようなコードを掲示板のプログラムの先頭行(#!/usr/local/bin/perl 等の「インタープリタ行」の次の行)に埋め込んでください。

open(AUTH_FILE,"./auth.cgi");
while(<AUTH_FILE>){
chomp;
print "Status: 204\n\n" if(/^$ENV{'REMOTE_ADDR'}$/);
}
close(AUTH_FILE);


そして、掲示板のプログラムと同じディレクトリにパーミッション644で「auth.cgi」というファイルを作り、アクセス制限したいIPアドレスを列挙しておきます。
その際、IPアドレスは1行に1個だけ書いて下さい。

この回答への補足

KNETのFAQ等も見ていたのですがこの方法が一番現実
的なようですね。

書き忘れで恐縮なのですが、この方法だと指定した
IP or ドメインを拒否、だと思うのですが、正規に
利用しているメンバーは限られているので指定した
ドメイン以外は拒否(=指定ドメインのみ許可)という
ふうには出来ませんでしょうか?

#この方法だとユーザー名パスワード認証等は出来ない
のですよね?詳しい書き方が書いてあるHPをご存知で
したらご紹介頂けると幸いです

補足日時:2005/03/04 20:04
    • good
    • 0

こちらのページにヒントになりそうなことが書いてありました。

参考になりますでしょうか。

参考URL:http://www.alpha-net.ne.jp/users2/luvsoul/webrin …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!