STEP 12 アクセス制限もどきをつくろう!


 アクセス制限もどきであります。
 UserID と Password なしではアクセスできない、あのアクセス制限であります。
 こんなのがアクセス制限です。(nph による 401 もどき)

 本来は、http サーバーが指定されたディレクトリへのアクセスを制限しています。 ブラウザからのリクエストに対して http サーバーが 401 をかえす。 ブラウザ側で、UserID と Password を要求するダイアログがでてきて、そこに入力する。 っていうようなことをしています。
 このあたりは、http/1.0 の9章あたりに説明があります。 HTTP/1.0(英語)  (日本語)

 BIGLOBE のサーバーでは、 月額 300 円のセットで、 アクセス制限が使えるようです。
 それでも、つくってしまうぞ! アクセス制限もどき! (というか、作った時には、www2s 以外のサーバーでは、アクセス制限は使えなかったのです。)
 SSI もどきにアクセス制限もどき機能をつけて、何とかしてみたいと思うのであります。

目標!

UserID と Password なしでは、アクセスできない事。
Link や画像、cgi なども動作する事。
手元でチェックできるように、オフラインで Link や画像なども動作する事。

そこで、考え出した仕掛け

cookie をつかったアクセス制限もどきになりました。

動かしてみる UserID, Password は guest です。

private.cgi の中身

private.cgi のしかけ

アクセスできない様にするためにファイルの実体は、public_html の中におかずに、 private_html というディレクトリをつくって、アクセス制限されたファイル群を置く事にします。

ディレクトリとファイルの配置の例
/home4/gama/
        |
        +- public_html/     このディレクトリ下のファイルが公開される。
            +- cgi/
                +- step12.htm       このファイル
                +- private/
                    +- private.cgi     パーミッションは 700 アクセス制限もどきの本体
                    +- private_html/   このディレクトリ下はパーミッションが 700 のため、cgi を経由しないとアクセスできない。
                        +- img/
                        |   |   +- blue.gif
                        |   |   +- green.jpg
                        +- welcome.htm
                        +- p1.htm
                        +- p2.htm
                        +- p3.htm
                        +- env.htm
                        +- set.sh       パーミッションは 700 env.htm から呼ばれています。
                        +- list.cgi     パーミッションは 700 1行変更して動作しています。
                        +- text.cgi     パーミッションは 700 変更なしで動作しました。
                        +- passwd       パスワードのファイル
ディレクトリのパーミションを 700 にしておくとそのディレクトリの下のファイルは普通は見る事ができません。 private.cgi をとおしてアクセスする事になります。

オフラインでも見るための仕掛け

<A HREF="abc.htm">abc</A>
<IMG SRC="abc.gif">
とかくところを、
<A HREF="./abc.htm">
<IMG SRC="./abc.gif">
というよう、"./" をファイル名の先頭につけて書いたものを private.cgi で
<A HREF="private.cgi?abc.htm">
<IMG SRC="private.cgi?abc.gif">
と変換してブラウザに渡す事にします。
これで、オフラインでも動作するし、 オンラインでは private.cgi をとおしてアクセス制限付きになるはずです。


ssi.cgi の機能

private.cgi は step2 での ssi.cgi の機能を持っています。 ssi.cgi としての機能は、問題なく動作しているようです。

拡張子から Content-type を決定する

private.cgi は 拡張子から Content-type を判断しています。
.html
.htm
.gif
.jpg
.jpeg
.cgi は、その出力に従う事にします。

CGI をうごかす仕掛け

cgi への対応は、不十分ですが動く場合もあります(^^;;;
<A HREF="foo.cgi?para">foo</A>
<IMG SRC="foo.cgi?para">
とかくところを、
<A HREF="./foo.cgi?para">
<IMG SRC="./foo.cgi?para">
というよう、"./" をファイル名の先頭につけて書いたものを private.cgi で
<A HREF="private.cgi?foo.cgi&para">
<IMG SRC="private.cgi?foo.cgi&para">
と変換してブラウザに渡す事にします。
cgi が意図したとおりに動かないケースは、いろいろあります(^^;;;
post method のものは、ほぼ動きません(^^;;;

passwd の設定

ユーザー名:暗号化されたパスワード

という行からできています。

暗号化されたパスワードを作る
genpwd.htm の中身
genpwd.cgi の中身


参考

ディレクトリをプロテクトする
rescue でのアクセス制限の解説

ご参考までに...2001/09/20 以前のコンテンツ

ユーザーのルートにディレクトリが作成可能でした。

ご参考までに...試行錯誤の痕跡(^^;;;

こういう方法では実現できなかったという失敗例です(^^;;;

nph による 401 もどき
中身

ブラウザからは本物のアクセス制限のダイアログが出ます。
ここで入力した UserID,Password が、CGI 側からわかれば、 本物みたいに見えるものが作れるとおもったんですが、 さすがに、UserID とか Password が、CGI 側では分かりませんでした。

98/06/22 未明 サーバーの設定変更により、nph は動作しなくなったようです(^^;;;
99/11/15 サーバーの設定変更により動作するようになりました。


戻る |ホームへ |進む