- ベストアンサー
CGIのアクセス制限について
環境は windowsXPHome SP3 / Apache2.2 / ActivePerl5 / (MySQLを使う予定) です。 htdocs\index.html htdocs\ddd\aaa.cgi htdocs\ddd\bbb.cgi のようなディレクトリ構成で、httpd.confは、htdocs以下を公開する設定になっていて <Directory "D:\Program Files\Apache Software Foundation\Apache2.2\htdocs\ddd"> AddHandler cgi-script .cgi Options +ExecCGI </Directory> を指定しました。 これを自宅サーバーとして公開する場合、外部からはindex.htmlにアクセスできるようにして、 aaa.cgiやbbb.cgiはindex.htmlからリンクやformのactionから呼び出されてからしか実行できない (直接cgiのurlを指定して開けない)ようにするにはどうすればいいでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
aaa.cgiにサーバがアクセスするんでない限り、アクセスもとは接続者だよ。 リンクからたどったとしても、接続リクエストを行うのはクライアントだからね。 もしlocalhostとしてcgiにアクセスしたいなら、サーバマシンにクライアントアプリケーションが存在して、それを使ってリクエストすることになる。 でも、そうなるとそのサーバにあるクライアントソフトウェアの制限は・・・となって、結局堂々巡りになります。 cookie食わせるとか、その程度しか方法ないんじゃないかねぇ・・・。 top.htmlじゃなくてtop.cgiとかにして、ランダムな文字列を記入したCookieを食わせておいて、それと一緒に一定時間だけサーバのデータベースに同じ文字列を保存しておく。 aaa.cgiにアクセスしたときに、cookieの文字列とデータベース内の文字列が一致した場合、アクセスを許可する・・・とか。 厳密にtopからのアクセス以外をはじくわけではないですが・・・。
その他の回答 (3)
- _--_1l1_1_
- ベストアンサー率67% (102/152)
この方がいいか? RewriteEngine on RewriteCond %{REMOTE_ADDR} !^127.0.0.1$ RewriteCond %{HTTP_REFERER} !^.*/index\.html$ [NC] RewriteRule .* /404.html [L]
お礼
回答ありがとうございます。 そのような技があるのですね。 どういう意味か理解できるよう今後の課題にしたいと思います。
- _--_1l1_1_
- ベストアンサー率67% (102/152)
CGIの中かmod_rewriteを使ってリファラを見て弾く。リファラも偽装できるけど。。 以下、未確認だが.htaccessの例 RewriteEngine on RewriteCond %{REMOTE_ADDR} !^127.0.0.1$ RewriteCond %{HTTP_REFERER} ^$ RewriteCond %{HTTP_REFERER} !^.*\.html$ [NC] RewriteRule .* /404.html [L]
お礼
回答ありがとうございます。 紹介してもらったページに書いてある内容は他の所でも見たのですが、 よく理解できません。 リファラーは偽装できるらしいので、それ以外の方法を取るとして、 ホストで制限となるとどうなるんでしょうか。 例えば任意の第3者がindex.htmlにアクセスしてそこからリンクでtop.cgi にアクセスする時、top.cgiにアクセスしたのはindex.htmlファイルの存在する 127.0.0.1(localhost)となるのでしょうか? それならdddディレクトリに127.0.0.1(localhost)のみ通過するように指定すればいい 事になりますが、そうでなく、top.cgiにアクセスしたのは第3者のIPでどこから接続 されるか任意なので、除外指定しようにもできないと思います。 何かうまい方法は無いものでしょうか、よろしくお願いします。
お礼
回答ありがとうございます。 簡潔な解決策はないのですね。 > aaa.cgiにサーバがアクセスするんでない限り サーバがアクセスとはサーバ(aaa.cgi)から他のCGI(bbb.cgi)を呼び出すという事でしょうか? (aaa.cgiがhtmlを吐くように書かれていてそのhtmlのformのactionが呼び出す等)