プロが教える店舗&オフィスのセキュリティ対策術

 今日、CGIに関して面白い現象を発見しました。

  .../check.cgi?2
  .../check.cgi?a=2

 上記の2つのプログラムをCGIで起動した場合、前者だと、実行時に $ARGV[0] の中に ? より後ろが書き込まれてしまう、という現象が起こったのです。
 つまり、$ARGV[0] = $ENV{'QUERY_STRING'}; を実行したのと同じ状態になります。

 環境は Win2000Pro + AnHTTPd 1.42k + ActivePerl 5.6.1 + IE6 です。
 これって仕様なんでしょうか。
 仮に仕様(あるいはバグ)だとすれば、どのプログラムの問題なのでしょうか。
 プログラム自体は、正常に動くようにすでに修正完了したんでいいんですが、ちょっと気になったので。

 何かご存知の方がいらっしゃいましたら、よろしくお願いします。

A 回答 (2件)

> これって仕様なんでしょうか。



仕様です。
ていうかこれが正常動作(もともと意図された動作)です。

この回答への補足

 ありがとうございます。

 ついでに、どのレベルでどういう条件で区別されてるのかも教えていただけますでしょうか。

補足日時:2004/06/28 14:29
    • good
    • 0

元々、@ARGVはスクリプトの起動時に与えられた引数のリストを入れるためのものです。



なのでコマンドプロンプトで呼び出すときに
perl xxx.pl arg1 arg2
とすれば
$#ARGV が 1
scalar(@ARGV) が 2
$ARGV[0] が arg1
$ARGV[1] が arg2
となり、

CGIを呼び出す際に
<form method="post" action="xxx.cgi?arg1+arg2">
のように呼び出せば、
$#ARGV が 1
scalar(@ARGV) が 2
$ARGV[0] が arg1
$ARGV[1] が arg2
となります。
    • good
    • 0
この回答へのお礼

 ありがとうございます。

 なぁるほど!
 機能文字としてのイコールがあるかどうかなんですね。
 これは覚えておけばあとあと役立ちそうです。
 ありがとうございました。

お礼日時:2004/06/28 18:05

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