Windows NT/95でPerl for Win32 (NTPerl)を使って、WWWのCGIと連携するための
方法をまとめてみました。
●Windows NTでPerl CGIスクリプトを使用する方法
Windows NTでCGIとしてPerlスクリプトを稼働させようとしてトラブっている
方はまず、Windows NTでCGIなどを読んで、
自分のシステム上で簡単なCGIバッチファイルが動くかどうか確認してください。
Perlスクリプトをセットアップするのに必要ないくつものステップに入る前に、
簡単なバッチファイルがちゃんと動くという確認をしておくと後々楽です。
(^^;
Windows NTでPerlスクリプトを実行するには、まずPerlインタープリタ
プログラムをダウンロードしインストールする必要があります。Perl自体は
Windows NTオペレーティングシステムやNetscapeサーバソフトウェアと
同梱されているわけではないのです。
Windows用PerlインタープリタのIntel版はCPANやActiveState社
他にあります。
#Jperl等詳細はこちらを参照してください。
CGIとしてPerlスクリプトを実行する方法はWWWサーバによって異なります。
ごく簡単な方法としては、それをcallするバッチファイルを設定
します。
◆注意
Microsoft IISの3.0以上については、デフォルトではBATファイルは
CGIの対象外となっていますので、そのままではこの方法は使えません。
拡張子と実行プログラムの関連付けをIIS(3.0はレジストリ)に追加登録
する必要があります。
別の言い方をすると、"MYCGI.PL" があなたのPerl CGIスクリプトだとすると
次に以下の2行のみ(あるいは同等内容)を含んだ"MYCGI.BAT"を生成します。
@ECHO OFF
C:\PERL\PERL.EXE C:\NETSCAPE\NS-HOME\DOCS\CGI-BIN\MYCGI.PL
# PATH等は実機の環境で当然異なります。
それから次のようにWWWページからそれをcallするようにします。
<A HREF="/cgi-bin/mycgi.bat"> My Perl Script </A>
NPH(non-parsed headers)スクリプトとしてこれを実行したいのなら、
次にバッチファイルを"NPH-MYCGI.BAT"と命名します。こうすれば、
webサーバはそれがNPHスクリプトをcallしているのだと認知します。
このようにPerlスクリプトを実行すれば、環境変数やstdin(標準入力)を
正しく読みとってくれます。ですから、POSTされたformに対するform処理機構
としてPerlを使用することができるわけです。
しかし、URLからの引数は渡されません。したがって、メソッドが"GET"である
form処理には、このやり方は使えません。 # セキュリティ面からは好都合ですね。(^^
URLからPERL.EXEへ直接(あるいは間接的に)引数を渡すのを認めるのは非常に
危険です。というのは、このやり方を悪用すれば、あなたのシステム内で
PERL.EXEを使った、好き勝手なコマンドを実行することができるようになる
からです。
PERL.EXEは"cgi-bin"ディレクトリやURLからアクセスできたり、実行できるような
場所に置いてはいけません。これには十分注意を払ってください。
そうでないと、一般の人が(PERL.EXEに)恣意的なパラメータを渡すことができる
ようになってしまいます。つまり、そのシステムは大破壊にさらされた状態と化して
しまうのです。
○セキュリティホール
ネットスケープ社のWWWサーバが、Windows NTのコマンドシェルにバッチファイルを
渡すやり方には、セキュリティホールがあることに注意してください。
十分に知識のあるユーザはそれを利用して、あなたのシステム上で任意のコマンドを
実行することができるのです。(このセキュリティホールは、O'Reillyの"Website"
サーバのような他のwebサーバでも発生します。)
このため、(上記のように最初にCGIを稼働させるような)何か暫定的なテストをする
場合を除き、webサーバ上ではCGIとしてバッチスクリプトを使用すべきではありません。
また、悪意のあるユーザからもwebサーバは安全であるという確信を持っておく必要が
あります。(ファイアウォールの中に置いたり、小規模サイトでは制限されたネット
ワーク内に置くことで守ることはできます。)
セキュリティホールに完璧に対応するには、全てのCGIプログラムを、代わりに
EXEプログラムにコンパイルしておくべきでしょう。EXEファイルは
セキュリティホールの影響を受けません。(EXEファイルは実行するために
コマンドシェルに渡す必要はありません。)
但し、Perlスクリプトを安全にcallする非常に簡単なEXEプログラムを使うことは
構わないでしょう。
[出所]
http://home.netscape.com/
How to use Perl CGI scripts on Windows NT
Technical note: 20209
Created: 02/02/96 by Brian
Updated: 02/15/96 by Brian
Product: Netscape Commerce and Communications Servers
Operating system: Windows NT
●https編
From: hatazawa@kawa.ssl.fujitsu.co.jp (Hatazawa)
Newsgroups: fj.lang.perl
Subject: Re: Windows CGI
Message-ID: <HATAZAWA.96Jan9093643@troll.kawa.ssl.fujitsu.co.jp>
>>>>> "Kenichiro" == Kenichiro Sota <ksota@gem.bekkoame.or.jp> writes:
In article <ksota-0801962046180001@gem.bekkoame.or.jp> ksota@gem.bekkoame.or.jp
(Kenichiro Sota) writes:
>> WindowsNT/95で、WWWサーバをたちあげ、PerlでCGIを記述するとき、
>> どのようにしたら良いのでしょうか。
>>
>> 具体的に言うと、UNIXなら Perlスクリプトの1カラム目に
>>
>> #! /usr/local/bin/perl
Kenichiro> 適切な答えになるかどうかわかりませんが、私のところでは
Kenichiro> 以下の組み合わせでNTでPerl CGIを実行しています。
Kenichiro> Windows NT Server Ver3.5
Kenichiro> Purveyor Ver1.1 (WWW Server)
Kenichiro> Perl (NT用)
Kenichiro> Perlの先頭には、 #./Perlを記述してますが、このことよ
Kenichiro> りもPerl.EXEにPathが通っていることが重要だと思います。
Kenichiro> EMWACのhttps Ver0.99でもPerlが使えるということですが、
Kenichiro> 私のところではうまくいきませんでした。
HTTPS上で Perlで記述した CGIを使っています。ただし、いくつか問題が
あって、UNIX上の WWWサーバと全く同じというわけにはいかないようです。
以下に簡単に説明します。
(1) HTTPSの以前のバージョン(うちで最初に使ったのは 0.94)では、*.pl
というファイルをPerl実行形式と認識してくれませんでした。そこで、httpd
のドキュメントを置くディレクトリ(C:\httpd\scripts とか)に、PERL.EXE
のオブジェクトを置いてしまい、HTMLには、
<A HREF="/scripts/perl.exe?scripts/test.pl+arg1">
と記述しました。ここで、test.pl は C:\httpd\scripts に置いたPerl
スクリプトで、arg1 がそのスクリプトへの引数です。
(2) HTTPS 0.99 では、*.pl をPerlの実行形式と認識するようになったと
ドキュメントに書いてあったので試してみましたが、
<A HREF="/scripts/test.pl">
は、確かに実行されました。(当然、PERL.EXEへのPathは必要でしょう。)
ところが、引数つきの
<A HREF="/scripts/test.pl?arg1">
のような記述が何故か実行されません。現在は仕方なく、(1)の方法に戻して
使っています。
(3) ちなみに HTTPS 0.94上の Perl CGI は、時々異常に遅くて使えませんで
したが 0.99では改善されてますので、最新版を入手して下さい。
http://emwac.ed.ac.uk/html/internet_toolchest/https/contents.htm
でドキュメントを見たり、ソフトのダウンロードが可能です。
(4) ちなみに UNIX上でデバッグした Perlスクリプトを NT上で使っているので
1行目は、
#!/usr/local/bin/perl
のままだったりします^^;
以上、参考になれば幸いです。
--
--
畑澤@富士通SSL
●おまけ
Making INTERACTIVE PAGE(How to make CGI and SSI) (日本語)
About NCSA httpd
all about the first Internet(日本語)
About CGI
CGI の書き方、入力のデコード法の FAQ 集
tutorial
WWW Security
World Wide Web FAQ (日本語)
ご意見、ご要望、ご質問は、
電子メールまたは
質問にお願い致します。