このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

WEBSTARで、パス制限で飛ぶfileを別のHDに

発言者:佐々木
( Date Thursday, October 19, 2000 23:28:07 )


時々お世話になっております。
今、webstar4.2でサーバーを実験的にテストしています。
macparlで、書かれたPass制限のCGIを
おこうとしているのですが、、、

パスが、通った場合、そのフォルダーの中のfileではなく
普段は、絶対にアクセスできない別のHDの中にあるfileの内容を
表示させたいのですが、パス指定をどうしていいのかわかりません。
webstar内であれば
:public_html:aaa:bbb:ccc.htmlのような感じで大丈夫なのですが、
これが、webstarの外の場合が、どうしていいのか???
エイリアスとかをwebstarの中においた場合は
そのアドレスが、わかっちゃった場合はアクセスできてしますので
だめなのです。(ほんとうにwebstarのその側のfileに直でアクセスしないと)

cgi的には、パスが通った場合、別HDの中のindex.htmlの内容を
cgiで呼び出して、表示させるというものを
つくっています。

解る方いましたら、ご指導のほどよろしくおねがいいたします。

ねむネコ さんからのコメント
( Friday, October 20, 2000 16:23:36 )

やっぱりエイリアスを置いて
そこへのpathはwebstarを使って、
相当に長いユーザ名とこれまた相当に長いパスワードを使って
アクセス制限(目的は拒否)をするのが簡単かつ現実的かと思うのですが。
pathでさえも一種のパスワードとして使えますし。

アメリカ・ペンタゴンといったような超有名サイトというわけでもないでしょうし(すみません)、
その他の経路さえしっかり防御してあれば、
この事実上多すぎる文字列の組み合わせに格闘する人(パソコン)はないと思います。
もし万が一いたとすれば、ご褒美ということで(^^;
定期的な変更とログの監視さえすれば問題ないと思います。

佐々木 さんからのコメント
( Saturday, October 21, 2000 07:19:18 )

ありがとうございました。
でも、ちょっとちがうんです。

本当はpass制限するのではなくて
パスとかきましたが、、、
承認ボタンを押したあとではないと
それ以降のフォルダー、またはページすべてがみられない
というふうに、したかったのです。

承認ボタンを押した人以外はきてほしくないので、
承認ボタンのところをパスとかきましたが

結局のところ、この辺はだいじょうぶなところなので
webstar folderのそとにpath指定する方法が知りたいのです。
もしくは、webstar folderの中でも、アクセスできないところ、、、

virtual hostで、public_htmlを指定しているのですが、
その、1つ上の階層とか、、、
そういう所にpath指定する方法だけわかればいいので
お解りになられる方いましたら、よろしくおねがいします。

田中求之 さんからのコメント
( Saturday, October 21, 2000 12:55:54 )

具体的にどのような処理をなさろうとしているのかが、いまひとつすっきりと
は分からないのですが、CGI の中でファイルを絶対パスで指定するというこ
とではだめなんでしょうか?

佐々木 さんからのコメント
( Sunday, October 22, 2000 13:25:30 )

すいませんでした、説明不足で、、、

一番させたいことは
index.htmlを、絶対に読ませるようにしたいのです。
index.html以外に直にちょくに飛んできても、
「index.htmlから入ってください。」とか、「ファイルがありません」とか
と表示させるようにしたいのです。

最近、cgiで作ったのゲームを、おいているのですが
そことかに、直に飛んで来る人がおおくなったため
そういうことをしたいのです。

絶対パスだと、

http://xxx.xxx.xxx.xxx/aaa/index.html
という風にしているのですが。
xxx.xxx.xxx.xxx自体を、virtual hostで、public_htmlに飛ぶように
してあるので、正式には、
xxx.xxx.xxx.xxx/public_html/aaa/index.htmlに来るようになるのですが
public_htmlの中に飛ぶ先のfileをおいたばあい
おいてあるところが解れば、飛べちゃうので
public_htmlと同階層におきたいのです。
そうすれば、xxx.xxx.xxx.xxxで、来てもpublic_htmlに
飛ばされちゃうため、絶対に来られないとおもうのです

で、このようにしたい場合の、パス指定がよくわからなくて、、、
http://xxx.xxx.xxx.xxx/aaa/の中のcgiでパス指定すると
public_htmlがトップフォルダーになっちゃうみたいで、、、
普通だと、1つ前のフォルダーとかの指定は
「../」ですよねっでもmacperlだと「/」のかわりに「:」を使うため
1つ前にフォルダーに移動するコマンドがわからないのです。
調べているのですが、まだよくわからなくて、、、

こんな感じなのですが、
やりたいことが、わかっていただけましたでしょうか?

よろしくおねがいします。

田中求之 さんからのコメント
( Sunday, October 22, 2000 23:10:56 )

>index.html以外に直にちょくに飛んできても、
>「index.htmlから入ってください。」とか、「ファイルがありません」とか
>と表示させるようにしたいのです。

もしこれを WebSTAR の CGI で実装したいのでしたら、PreProcessor を作っ
て、ブラウザの Referer をチェックするという方法が一番まっとうだと思
います。少なくとも、私なら、そうします。

CGI のアクセスの Referer をチェックして、これが空だとか他のサイトに
なっているなどの場合は、強制的に
http://xxx.xxx.xxx.xxx/aaa/index.html
へとリダイレクトさせればよいわけです。

PreProcessor が入ることで、サイトの処理自体が若干落ちると思いますが、
少なくとも、お望みのようなことはできます(実際にやったことがあります)。

PreProcessor という方法で考えてみてはどうでしょうか?

なお、AppleScript でなら PreProcessor のサンプルはすぐに書けるのです
が、私は Perl は書けませんので サンプルをお見せすることはできません。
Perl に詳しい方、もしよかったらフォローしてください。

田中求之 さんからのコメント
( Sunday, October 22, 2000 23:34:27 )

PreProcessor を使わずに、CGI の側で Cookie を使ってチェックを行うという
手もありますね。

index.html を RAW ファイルで作成し、テンポラリな Cookie を発行する
ようにしておき、この Cookie を持っているかどうかを CGI の側でチェックし、
Cookie を持ってなければ index.html へリダイレクトする。

この方法だと、PreProcessor を使わずに済む分、サイトへの負担は減りますね。
WebSTAR には RAW ファイルっていう便利なものがあるので、これを使わない
手はないってところでしょうか。