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

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

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

ISPにwakwakを使用しているのですが、cgi-binディレ クトリ配下に置いてある掲示板に対してアクセス制限 をかける方法が無いか探しています。 wakwakの仕様で ・cgiはcgi-binディレクトリ配下にのみ設置可 ・htaccessはcgi-binディレクトリ配下では動作不可 というようになっておりお手上げ状態です。 htaccessで制限出来るディレクトリにリンク用のhtml を置いて、そこからじゃないとcgiディレクトリに飛べ ないようにすればと思ったのですが、どうもcgi-bin ディレクトリ(というか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

  • .htaccessでアクセス制限をかけたディレクトリの下の階層のディレクトリのアクセス制限

    はじめまして、とあるWEBデザイナーです。 会社のサイトをホスティング会社にお願いして 専用サーバーで保守管理してもらっています。 表題の件なのですが、.htaccessでアクセス制限を かけたディレクトリの下の階層にある ディレクトリにアクセス制限をかけてID、パスワード を入力させるようにしたいのですが、 .htaccessについて調べてみたところ、 .htaccessはアクセス制限をかけた以下のすべての ディレクトリが有効範囲になるため、 すでにアクセス制限有効なディレクトリに 重複して設定することは出来ない ということが分かりました。 このようなケースの場合、ディレクトリに アクセス制限をかけるにはどうしたら よいのでしょうか? CGIなどでプログラムを組むのでしょうか? それともWebサーバー側で設定などするのでしょうか? 当方、フリーのCGIやPHPを少し改造できる程度です。 こういう場合、普通はどうされているのか、 どんな情報でもかまいませんので お教えいただけると幸いです。

  • cgi-bin内に.htaccess

    現在MacOSXでwebサーバーを構築しているのですが,cgiファイルを置いているcgi-bin内に, .htaccessファイルを置いてアクセス制限を行いたいのですが,これはどのようにしたら良いでしょうか? 現在webページの一部に.htaccessを用いてアクセス制限を行い.そこからcgiにリンクさせているのですが, cgiのアドレスを直で入力するとアクセスできてしまいます. よろしくお願いします.

    • ベストアンサー
    • CGI
  • cgi-binディレクトリ.............

    私のサーバーでは今までANHTTPDを使っていたのですが、apacheでもやってみようと思いまして、apacheに入れ替えたのですが、今まではcgi-binディレクトリ以下に掲示板のアップロードの画像やhtml・swfファイルなどをいっしょに入れていたのですが、apacheに入れ替えるとそれらのファイルがアクセス権がないと言われ観覧できません。 ANHTTPDと同様にcgi-binディレクトリ以下でも画像やhtmlなどを見れるようにするにはどうすればよいでしょうか? アドバイスよろしくお願いします。 (サーバーOSは WINDOWS XPです)

  • /cgi-bin/のファイル読み出し

    WindowsXPでApacheをlocalhostで使用しています。 httpd.confを以下のように設定してcgiは問題なく作動していますが、/cgi-bin/に置いた画像やhtmlが読み出せません (すなわちhttp://localhost/cgi-bin/にアクセス出来ず、Forbiddenのエラーが出ます) 今は仕方なく、cgiで使用するファイルや画像をDocumentRoot配下に置いていますが、/cgi-bin/配下のファイルを読み出すhttpd.confの設定を教えて下さい。 DocumentRoot "F:/" <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "F:/"> AllowOverride None Order allow,deny Allow from all </Directory> <IfModule mod_alias.c> ScriptAlias /cgi-bin/ "F:/cgi-bin/" <Directory "F:/cgi-bin"> AllowOverride None Options ExecCGI MultiViews Order allow,deny Allow from all </Directory> </IfModule>

  • cgi-binにアクセスできない

    apache初心者です。 Turbolinux6.0+apache1.3.12でHTTPサーバを試しているのですが、 cgi-binにあるファイルを見ようとするとHTTP 403エラーが出て表示できません。 属性とグループを色々変えてみたんですが、だめでした。 access.confで関係ありそうな所は <Directory /> Options None AllowOverride None order allow,deny allow from all </Directory> <Directory /home/httpd/html> Options Indexes Includes FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> <Directory /home/httpd/cgi-bin> AllowOverride None Options FollowSymlinks ExecCGI order allow,deny allow from all </Directory> としていますが、なぜcgi-binの中身が見えないのかわかりません。 よろしくおねがいします。

  • ディレクトリごとアクセス制限できない~!!

    最近、久しぶりにアクセス制限のCGI設置を試みようとしたら どうもhtmlのフォルダより上層のディレクトリにFTPで アクセスできないようになっていて、隠したいフォルダや ファイルを置けるPrivateなディレクトリへのアクセスが 困難になっています。 (私が使用しているサービスは「infoseek」です。) wwwのアドレスで直接アクセス出来ない上層ディレクトリへ FTPでアクセスしてフォルダ等を作成・設置できる 「優秀な?無料ホームページサービス」ってまだ どこかに健在でしょうか・・・?? ご存知でしたら是非お教え願います。

    • ベストアンサー
    • CGI
  • ディレクトリへのアクセス制限

    htaccessを使って、ディレクトリへのアクセス制限をしたいのですが。 できれば、IDとパスワードの発行、管理はMySQL プログラムはPHPで作成したいと思っています。 いまいち、htaccessを使っての制限方法の仕組みが よく分かっていないのですが、サンプルコードかフリーのプログラムが あれば教えていただけないでしょうか?

    • 締切済み
    • PHP
  • 「cgi-bin」で403エラーが出ます

    いま運営中のサイトで発生するエラーの原因が分かりません。 運営しているURLが http://www.gehogeho.com/ とすると http://www.gehogeho.com/cgi-bin/ のURLにアクセスすると403エラーが発生します。 http://www.gehogeho.com/ の直下に「cgi-bin」というディレクトリは存在せず、cgiも使っていません。(サイト自体はApacheとPHPで動いています。) 存在しないURLにアクセスされた場合は全てホームにリダイレクトするように.htaccessで設定しています。 原因と回避方法がわかる方がいらっしゃいましたらお願いいたします。

  • cgi-binディレクトリ配下の画像の表示について

    仕事で他の部署が作成したホームページをアップロードしています。その中で無料掲示板のファイルがあり、アプロードしたのですが、 掲示板で使用するアイコンが正常に表示されませんでした。 調べたところ、アイコンで使用する画像をcgi-binディレクトリの配下においていた事が原因で、別のディレクトリに移動したところ、 正常に表示されました。 ここでふと疑問がでてきたのですが、カウンターで使用する数字の画像ファイルも、cgi-binディレクトリの配下においてありますが正常に表示されています。 画像ファイルはどちらもgif形式で同じなのに、アイコンの画像はなぜ表示されないのでしょうか。

  • CGIへの直リンク防止方法について

    CGIへの直リンクの防止方法について質問です. MacOS X でWEBサーバーを構築しています.httpdはapacheです. 現在,http://www.aaa.jp/bbb/ccc.htmlからhttp://www.aaa.jp/cgi-bin/ccc.cgiへリンクさせています.ccc.htmlへは.htaccessを用いてパスワードによるアクセス制限を行っております. 今の設定ですと,cgiファイルへ直接リンクできてしまいます.そこで,直接リンクを防止するために,apache内に <Directory /library/var/cgi-bin> SetEnvIf Referer "^http://www\.aaa\.jp/ ref_ok order deny,allow deny from all allow from env=ref_ok </Directory> という記述をしました.しかしこの記述を加えるとcgiを実行できなくなってしまいます.cgi-biフォルダ内の.htaccessを有効にして,.htaccessで記述してもうまくいきません. この記述はhttp://www.shtml.jp/htaccess/referer.htmlを参考にしました. どこがおかしいところはありますでしょうか. ご教授お願いします.