重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

環境は
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を指定して開けない)ようにするにはどうすればいいでしょうか?
よろしくお願いします。

A 回答 (4件)

aaa.cgiにサーバがアクセスするんでない限り、アクセスもとは接続者だよ。


リンクからたどったとしても、接続リクエストを行うのはクライアントだからね。
もしlocalhostとしてcgiにアクセスしたいなら、サーバマシンにクライアントアプリケーションが存在して、それを使ってリクエストすることになる。
でも、そうなるとそのサーバにあるクライアントソフトウェアの制限は・・・となって、結局堂々巡りになります。
cookie食わせるとか、その程度しか方法ないんじゃないかねぇ・・・。
top.htmlじゃなくてtop.cgiとかにして、ランダムな文字列を記入したCookieを食わせておいて、それと一緒に一定時間だけサーバのデータベースに同じ文字列を保存しておく。
aaa.cgiにアクセスしたときに、cookieの文字列とデータベース内の文字列が一致した場合、アクセスを許可する・・・とか。
厳密にtopからのアクセス以外をはじくわけではないですが・・・。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
簡潔な解決策はないのですね。

> aaa.cgiにサーバがアクセスするんでない限り
サーバがアクセスとはサーバ(aaa.cgi)から他のCGI(bbb.cgi)を呼び出すという事でしょうか?
(aaa.cgiがhtmlを吐くように書かれていてそのhtmlのformのactionが呼び出す等)

お礼日時:2011/08/22 19:14

この方がいいか?


RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
RewriteCond %{HTTP_REFERER} !^.*/index\.html$ [NC]
RewriteRule .* /404.html [L]
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そのような技があるのですね。
どういう意味か理解できるよう今後の課題にしたいと思います。

お礼日時:2011/08/22 20:36

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]
    • good
    • 0
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
紹介してもらったページに書いてある内容は他の所でも見たのですが、
よく理解できません。
リファラーは偽装できるらしいので、それ以外の方法を取るとして、
ホストで制限となるとどうなるんでしょうか。
例えば任意の第3者がindex.htmlにアクセスしてそこからリンクでtop.cgi
にアクセスする時、top.cgiにアクセスしたのはindex.htmlファイルの存在する
127.0.0.1(localhost)となるのでしょうか?
それならdddディレクトリに127.0.0.1(localhost)のみ通過するように指定すればいい
事になりますが、そうでなく、top.cgiにアクセスしたのは第3者のIPでどこから接続
されるか任意なので、除外指定しようにもできないと思います。
何かうまい方法は無いものでしょうか、よろしくお願いします。

お礼日時:2011/08/22 18:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!