• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cgi-binディレクトリにアクセス制限をかける方法)

cgi-binディレクトリにアクセス制限をかける方法

このQ&Aのポイント
  • wakwakを使用している場合、cgi-binディレクトリにアクセス制限をかける方法を探しています。
  • htaccessでは動作しないため、別の方法を考えています。
  • リンク用のhtmlを置いて、そこからしかcgiディレクトリにアクセスできないようにする方法を検討しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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#gethostbyaddr
tokyo_sky
質問者

お礼

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

その他の回答 (4)

回答No.4

さらに補足です。 >詳しい書き方が書いてあるHPをご存知でしたらご紹介頂けると幸いです 先ほどの回答で説明したcookieを使った作例を見つけましたのでURLを貼っておきます。 作例では画像を表示する/しないの制御を行ってますが、cookieまわりの動作は参考になると思います。 また、ちょっと改造すれば入力したユーザー名を取得してそれによって動作を変えたりとかも可能でしょう。

参考URL:
http://www.aimix.jp/cgi/acccookiepas.html
tokyo_sky
質問者

補足

本当にありがとうございます。 図々しいですが最後に一点だけ質問をさせて 下さい。 auth.cgiに記述するのはドメイン名(例えば自分の環境 であればusen.ad.jpですが、実運用を考えると*usen. ad.jpのような指定)でも可能でしょうか? であればローカル色が強いISP利用者と固定IPで接続 している利用者が多いのでなんとか実用に耐えると 思っているのですが・・・。

回答No.3

>正規に利用しているメンバーは限られているので指定した >ドメイン以外は拒否(=指定ドメインのみ許可)という ふうには出来ませんでしょうか? 出来ます。 先ほど載せたコードの print "Status: 204\n\n" if(/^$ENV{'REMOTE_ADDR'}$/); の部分を print "Status: 204\n\n" if(!/^$ENV{'REMOTE_ADDR'}$/); にするだけです。 # ただしIPアドレスが固定でない環境では接続するたびに # 新しいIPアドレスを管理者に教えてアクセス可能にしてもらう、、 # といった運用が必要になり非効率で非現実的ですが。 >#この方法だとユーザー名パスワード認証等は出来ないのですよね? そうですね。 その場合はログインページを別に作って、ログイン成功したらcookieにログイン成功した旨の情報を埋め込み、掲示板CGIではそのクッキーを読み出してログイン状態を見て表示してやるという方法が考え付きます。

回答No.2

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個だけ書いて下さい。

tokyo_sky
質問者

補足

KNETのFAQ等も見ていたのですがこの方法が一番現実 的なようですね。 書き忘れで恐縮なのですが、この方法だと指定した IP or ドメインを拒否、だと思うのですが、正規に 利用しているメンバーは限られているので指定した ドメイン以外は拒否(=指定ドメインのみ許可)という ふうには出来ませんでしょうか? #この方法だとユーザー名パスワード認証等は出来ない のですよね?詳しい書き方が書いてあるHPをご存知で したらご紹介頂けると幸いです

回答No.1

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

参考URL:
http://www.alpha-net.ne.jp/users2/luvsoul/webring/taisaku.html

関連するQ&A