• ベストアンサー

a.cgi経由で、b.cgi実行

a.cgiからLOCATIONで、b.cgiを実行したいのですが、 1つ条件がありまして、b.cgiを実行する場合は必ず a.cgi経由出なければいけないというチェックをしたいのです。 LOCATIONを使用した場合、環境変数「HTTP_REFERER」に値がセットされないみたいなのでNGでした。 またパラメータを持たせるにしても、LOCATIONはGETしか使えないので、アドレスを見ればばればれになってしまいNGです。 何かいい方法はないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

セッション管理というやつですね。 a.cgi セッションIDを生成(ランダムに)。 生成したID(+作成日時とか)をファイルに保存 b.cgiに遷移 Location b.cgi?セッションID b.cgi でセッションIDが正しい(存在する)かチェックします。 →参考URL http://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html http://www.dab.hi-ho.ne.jp/sasa/biboroku/perl/session.html

参考URL:
http://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html
kurei
質問者

お礼

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

その他の回答 (3)

  • omni2
  • ベストアンサー率53% (33/62)
回答No.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を使用しないといけないのでしたら忘れてくださいごめんなさい。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

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

回答No.1

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でデータを送れますよ。

kurei
質問者

お礼

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

関連するQ&A

専門家に質問してみよう