PageID:Perl-NT_CGI
Windows NTでCGIのページ
●Windows NTで稼働するCGIスクリプトを作成する方法
ここには、Windows NT上でCGIスクリプトを使用する際に知っておくべき事項を
いくつか述べてあります。
◆注意
Microsoft IISの3.0以上については、デフォルトではBATファイルは
CGIの対象外となっていますので、そのままでは以下の方法は使えません。
拡張子と実行プログラムの関連付けをIIS(3.0はレジストリ)に追加登録
する必要があります。
○バッチファイルにおけるecho
Windows NT上で稼働するCGIスクリプトを作成する際に、何かトラブった場合、
ごく簡単なスクリプトから始め、それがちゃんと動くか確認してからもっと
複雑なスクリプトに取りかかるという手順を踏むのが良策です。
Windows NTでバッチファイルを使った、簡単なCGIスクリプトの例を示します。
@echo off
echo Content-type: text/plain
echo.
echo Hello, world
(スペースなしで直後にピリオドがある)"echo." の行は、Windows NTでは
ブランク行をechoするのだということを銘記しておいてください。
このサンプルを"TEST.BAT"ファイルとしてセーブし、コマンドライン(DOS
プロンプト)から実行してみてください。下記と全く同じ出力となる筈です。
Content-type: text/plain
Hello, world
次に、webサーバで設定した"cgi-bin"ディレクトリがちゃんとあるか確認
(administration serverで設定している筈です)のうえ、
cgi-binディレクトリにTEST.BATを置き、ブラウザにURL
"http://servername(あなたのサーバ)/cgi-bin/test.bat"
と入力し、webサーバから実行してみてください。
ブラウザ上に"Hello, world"の言葉が表示される筈です。
これはどうも変だぞと感じている方は下記をお読みください。
次のスクリプトは、UNIXにおける"Hello, world" CGIスクリプトですが、
これはWindows NTでは期待通りに動きません。
echo Content-type: text/plain
echo
echo Hello, world
うまく動かない理由は以下の通りです。
(1) スクリプトの最初に "@echo off"行がありません。
これでは、実行時にスクリプトの各行をそのままechoしてしまい、
ブラウザを混乱に陥れてしまいます。"@echo off"はこれを抑制します。
(2) "echo"コマンド行自体がブランク行をechoするのではなく、"ECHO is on"や
"ECHO is off"と出力しまいます。したがって、ブランク行を出力する他の
方法を見つける必要が出てきます。(その例が"echo."の使用です)
○拡張子
".CGI"拡張子を持つCGIプログラムをちゃんと実行させようと、わざわざrename
する必要はありません。
Windows NT上のNetscape webサーバは、".CGI",、".EXE"、 ".BAT"を有効なCGI
ファイルタイプと認識します。(サーバに対しCGIを「有効」に設定している
場合に限ります。)
お好みなら".EXE"ファイルを".CGI"拡張子にrenameしても差し支えありませんし、
webサーバはこれを正しく処理しますが、".BAT"ファイルを".CGI"拡張子に
renameしてはなりません。webサーバはこれをバイナリの実行可能ファイルとして
実行しようとします。(失敗に終わります。)
○環境変数
環境変数はUNIXにもありますが、Windows NTでは、同じようにシェルスクリプトで
処理されるわけではありません。例えば、UNIX上で、シェルスクリプトの中に
"$HTTP_USER_AGENT"への参照があったとします。Windows NTのバッチファイル
では、(パーセント文字で両側を括った)"%HTTP_USER_AGENT%"のように
それを記載することが要求されます。
○セキュリティホール
ネットスケープ社のWWWサーバが、Windows NTのコマンドシェルにバッチファイルを
渡すやり方には、セキュリティホールがあることに注意してください。
十分に知識のあるユーザはそれを利用して、あなたのシステム上で任意のコマンドを
実行することができるのです。(このセキュリティホールは、O'Reillyの"Website"
サーバのような他のwebサーバでも発生します。)
このため、(上記のように最初にCGIを稼働させるような)何か暫定的なテストをする
場合を除き、webサーバ上ではCGIとしてバッチスクリプトを使用すべきではありません。
また、悪意のあるユーザからもwebサーバは安全であるという確信を持っておく必要が
あります。(ファイアウォールの中に置いたり、小規模サイトでは制限されたネット
ワーク内に置くことで守ることはできます。)
セキュリティホールに完璧に対応するには、全てのCGIプログラムを、代わりに
EXEプログラムにコンパイルしておくべきでしょう。EXEファイルは
セキュリティホールの影響を受けません。(EXEファイルは実行するために
コマンドシェルに渡す必要はありません。)
「Windows NTでCGIとしてPerlスクリプトを使用する方法」に関する情報は
Windows 95/NTでPerl&CGIを参照してください。
[出所]
http://home.netscape.com/
How to get CGI scripts to work on Windows NT
Technical note: 20202
Created: 07/25/95 by Brian
Updated: 02/15/96 by Brian
Product: Netscape Commerce and Communications Servers
Operating system: Windows NT
ご意見、ご要望、ご質問は、
電子メールまたは
質問にお願い致します。
ホームページへ戻る。