プロが教えるわが家の防犯対策術!

a.cgiからLOCATIONで、b.cgiを実行したいのですが、
1つ条件がありまして、b.cgiを実行する場合は必ず
a.cgi経由出なければいけないというチェックをしたいのです。

LOCATIONを使用した場合、環境変数「HTTP_REFERER」に値がセットされないみたいなのでNGでした。

またパラメータを持たせるにしても、LOCATIONはGETしか使えないので、アドレスを見ればばればれになってしまいNGです。

何かいい方法はないでしょうか?
よろしくお願いします。

A 回答 (4件)

a.cgiとb.cgiはそれぞれ違うサーバに存在するんでしょうか?それでしたら、LOCATIONでとばしている理由もわかるんですが。


もし、同じサーバ内にあるのでしたら、
a.cgiは、パーミション755設定
#####a.cgi内容########################
#!/Perl/bin/perl
require "b.cgi";
&test;
######################################
b.cgiは、パーミション644設定
#####b.cgi内容#########################
#!/Perl/bin/perl
print "Content-type: text/html\n\n";
sub test{
print "aaa<BR>";
}
#######################################
こうしておけば、a.cgiにブラウザでアクセスがあるとb.cgiが実行されて、b.cgiに直接アクセスがあってもエラーが表示されるようになるとおもうのですが。

これではだめでしょうか?やはりLocationを使用しないといけないのでしたら忘れてくださいごめんなさい。
    • good
    • 0

内部の一部の人でしたか。


HTTP_REFERERは普通のリンクでも保障がないうえに偽装もできるので厳密なチェックには使えない。
パラメータをポストしてもアドレスには見えないにしても何を送っているか調べることは可能。
ということでセッション管理をおすすめしたんですが・・・
ゆるくてもかまわないのであれば、
#1の方のようにLocationをやめ、
<body onload="location.href='b.cgi'">
この一行をhtmlとして出力すればHTTP_REFERERが取れると思います。

なお、普通に考えればa.cgiとb.cgiを一つにまとめるのが早くて簡単だと思うのですが、それが出来ない事情とか、もう少し条件や背景がわかると良案が出るかもしれません。
    • good
    • 0

セッション管理というやつですね。



a.cgi
セッションIDを生成(ランダムに)。
生成したID(+作成日時とか)をファイルに保存
b.cgiに遷移 Location b.cgi?セッションID

b.cgi でセッションIDが正しい(存在する)かチェックします。

→参考URL
http://www.atmarkit.co.jp/fsecurity/rensai/webho …
http://www.dab.hi-ho.ne.jp/sasa/biboroku/perl/se …

参考URL:http://www.atmarkit.co.jp/fsecurity/rensai/webho …
    • good
    • 0
この回答へのお礼

steel_grayさんの言う通り、厳密にはセッション管理で
しっかりやらなければならないんですよね。
今回は内部の一部の人が使用するプログラムなので、時間の関係上セッションは使いませんが、一度参考URLをみて、
時間のあるときに試してみたいと思います。

また何かありましたら、よろしくお願いします。
ありがとうございました。

お礼日時:2005/04/22 16:10

a.cgiで、b.cgiをonLoadでsubmitするページを作ってはどうでしょう?



<body onLoad="SetLocation();">
などという形でonLoadでJavaScriptを呼び出します。
必要なデータをhiddenで持たして
<form name="LocationSub" action=b.cgi method=POST>
<input type=hidden name=*** value=***>

JavaScript部
function SetLocation()
{
document.LocationSub.submit();
}

これだとPOSTでデータを送れますよ。
    • good
    • 0
この回答へのお礼

なるほど、JavaScriptを使うと、ロケーションでもPOSTできるんですね。大変参考になりました。
ありがとうございます。

お礼日時:2005/04/22 16:11

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