ActiveState Home Page       Win32 FAQ


文書名

perlwin32faq6 - Webサーバの情報



概要

Perl for Win32 に関するWebサーバの設定方法とトラブルシューティング方法



Perl for Win32をサポートしているHTTPサーバにはどのようなものがあるのでしょうか?

標準のCGIやISAPIを使用している、Windows NT および Windows 95/98のサーバの大半でWin32用のPerlスクリプトは動きます。 次のサーバは、Perl for Win32 が動くように対応されているものです。(中括弧内は対応しているプロトコル):

Computer Software Manufaktur の Alibaba [CGI, ISAPI]

    http://alibaba.austria.eu.net/
Win32用Apache [CGI, mod_perl]

注)現在mod_perlは、Win32上でPERL_OBJECTサポートなしでビルドされたPerl以外では動きません。 ActivePerlはPERL_OBJECT regimeのもとでビルドされているので、mod_perlを利用する人はソースからPerlをビルドする必要があります。


    http://www.apache.org
    mod_perl ホームページ: http://perl.apache.org
EMWAC Web Server [CGI]

    http://emwac.ed.ac.uk/html/internet_toolchest/https/contents.htm
Microsoft Internet Information Server [CGI, ISAPI]

    http://www.microsoft.com/iis/
Netscape Enterprise および FastTrack Server [CGI, nsapi_perl]

    http://home.netscape.com/
    mod_nsapi ホームページ: http://interact.canoe.ca/~bsugars/nsapi_perl.html
O'Reilly WebSite Professional [CGI, ISAPI, WSAPI]

    http://software.ora.com/
Process Software のPurveyor [CGI, ISAPI]

    http://www.process.com/

以下のYahooページにWindows, Windows 95, Windows NT 用のWebサーバのリストがあります。:


    http://www.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Microsoft_Windows_Windows_95/

(一つのURLです。)



ApacheでPerl for Win32 を使うにはどうすればよいのでしょうか?

注)現在mod_perlは、Win32上でPERL_OBJECTサポートなしでビルドされたPerl以外では動きません。 ActivePerlはPERL_OBJECT regimeのもとでビルドされているので、mod_perlを利用する人はソースからPerlをビルドする必要があります。

CGIスクリプトをすべて1つのディレクトリにまとめたいのなら、次のような行をsrm.confファイル(訳注:最近ではすべての設定をhttpd.confファイルに統合する傾向にあります。)に追加します。(ディレクトリは自由に指定できますが、既存のディレクトリでなければなりません。) :


    ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"

変更したら、一旦Apacheサービスを停止して再起動します。

ApacheはUNIXの shebang (#!/path/to/perl)文法のエミュレーションを行ってくれるので、次のステップは簡単です。 次のように、先頭行にインタープリタまでの正しいパスをセットして、 Perlスクリプトをcgi-binディレクトリに入れるだけです。


    #!C:\PERL\5.00464\bin\MSWin32-x86\perl.exe
    use CGI qw(:standard) ;
    print header();
    print "Hello, world";

.plなどの拡張子毎にCGIスクリプトを有効する場合、srm.confに次のような行を追加する必要があります。:


    AddHandler cgi-script .pl

デフォルトでは、DocumentRoot ディレクトリにCGIスクリプトを置くことは認められていません。しかし、他のドキュメントディレクトリに置くことはできます。ドキュメントディレクトリは、srm.confでAliasコマンドを使って設定します。 :


    Alias /ResourceKit/ "E:/utilsamp/"

これで、末尾が.plのファイルをドキュメントディレクトリに置くことができるようになりました。さらに、 前述したように、perl.exeインタプリタまでのフルパスを記述した#!行をスクリプトの先頭に入れておく必要があります。

DocumentRoot ディレクトリにCGIスクリプトを置きたい場合は、 access.confでDocumentRoot用の<Directory> と </Directory> 間でOptionディレクティブにExecCGI オプションを追加します。 (これらは以下のコメントタイトルの後に記述されています。)


    # This should be changed to whatever you set DocumentRoot to.
以下は、更新後のOptions ディレクティブの1例です。:
    Options Indexes FollowSymLinks ExecCGI


Perl for Win32をサポートするようにEMWAC https を設定するにはどうすればよいのでしょうか?

まず、EMWACのドキュメントに目を通します。


    http://emwac.ed.ac.uk/html/internet_toolchest/https/scripts.htm

以下のステップにしたがって設定していきます。:

  1. Perl for Win32 をインストールします。

  2. EMWAC サーバをインストールします。EMWACが正しくHTMLファイルを処理できていることを確認します。

  3. PerlディレクトリのbinサブディレクトリがシステムのPATH環境変数に入っていることを確認します。perl.exeがC:\Perl\5.00500\bin\MSWin32-x86などのサブディレクトリに置いてあれば、そのディレクトリも含めます。 これはコマンドラインではなく、コントロールパネルでセットしなければなりません。また、ユーザ個人の環境変数ではなく、システム環境変数としてセットする必要がある点に注意してください。

  4. スクリプトが拡張子.plを持っていることを確認します。それが、 httpsサービスがそのファイルをPerlスクリプトとして認識する唯一の手段となります。

  5. EMWACサーバを使用しているアカウントでスクリプトが読み取り可能になっていることを確認します。 通常、これは、そのスクリプトをEveryoneグループに対して読み取り可能とすべきであるということを意味します。

  6. 使用するperlバイナリファイル、perlライブラリファイル、モジュールなどのすべてのサポーティングファイルが、EMWACサーバに使用されるアカウント(Everyoneグループ等)に読み取り可能となっていることを確認します。

EMWACサーバは、.pl拡張子を持ったファイルのHTTPリクエストがあると、perl [filename]を実行しようとします。 それがPerlスクリプトをEMWACサーバで動かす唯一の方法ですから、上記の指示には必ず従ってください。

デフォルトでは、Perl for Win32のインストールは@INCperl.exeまでのパスを入れます。

EMWAC serverはサービス(Windows NTサービスとは何ですか?参照)として動作するので、ファイルやPATH環境変数へのアクセスを可能にする特別なステップを踏む必要があります。 自分がスクリプトを読み取れたり、コマンドラインからスクリプトを実行できるからといって、それがサーバにできるとは限らないのです。



IIS 3.0以下の場合、Perl for Win32をサポートするように設定するにはどうすればよいのでしょうか?

デフォルトでは、Perl for Win32のインストーラは、.plx拡張子をPerl for ISAPIにマップします。インストールプロセスの間に、使用する拡張子を変更することもできます。 インストーラは、IISがすでにインストールされている時しかこれを行いませんから、最初にIIS をインストールしておき、それから Perl for Win32 をインストールしなければなりません。 セッティングを再設定する必要がある場合、あるいは、手動でセットしなければならない場合、このセクションの指示が役に立つでしょう。

Microsoft Internet Information Server (IIS)は Windows NT Serverに同梱されています。Peer Web Services (PWS) は Windows NT workstationに同梱されています。両製品の設定は基本的に同じです。まず、IISドキュメントの 第8章、Publishing Information and Applications(情報の発行とアプリケーション)に目を通すとよいでしょう。

Perl for Win32をIISの下で動作させるには、次のステップに従う必要があります。:

  1. IIS用のscript mapで、適切なインタープリタとスクリプトの拡張子を関連付けます。これはレジストリキー HKEY_LOCAL_SYSTEM の下の "System\CurrentControlSet\Services\W3SVC\Parameters\Script Map" という サブキーで行います。多くの人が拡張子を2つマップします: 一つは(.plなど)perl.exe用の拡張子と、もう一つは (.plxなど) PerlIS.dll用拡張子です。 注意しなければならないのは、script map での拡張子のマッピングは、 エクスプローラにおける拡張子の関連づけとは「同じではない」、ということです。 script mapでは実行ファイルまでのフルパスを使います。

  2. サーバの仮想ディレクトリにスクリプトを置きます。この仮想ディレクトリは 、実行アクセス権を持つようにしておきますが、読み取りアクセス権は持たないように設定します。 Internet Service Managerを使えば、仮想ディレクトリを追加したり、アクセス権を見たりすることができます。 その仮想ディレクトリ用のURLは、 WWWルートディレクトリの下にあるディレクトリのURLとオーバラップしてはなりません。 ということです。たとえば、物理的にWWWルートディレクトリの下にcgi-binサブディレクトリがある場合、cgi-binという仮想ディレクトリを持つことはできません。

  3. スクリプトに、IISサーバ用アカウントによる読み取り権があることを 確認して下さい。このアカウントは、Internet Service Manager でセットします。 デフォルトでは、アカウントはIUSR_[your server name]となってます。 詳しくは、Windows NTサービスとは何ですか?ファイルのパーミッションをセットするにはどうすればよいのでしょうか?を参照してください。

  4. 使用するperlバイナリファイル、perlライブラリファイル、モジュールなどのすべてのサポーティングファイルが、IISサーバ用アカウントに読み取り可能となっていることを確認します。 詳しくは、Windows NTサービスとは何ですか?ファイルのパーミッションをセットするにはどうすればよいのでしょうか?を参照してください。

レジストリを変更したり、Perlをインストールした後は、Web サービスを再起動する必要があります。

IIS はサービス(Windows NTサービスとは何ですか?)として実行されるので、 IIS がファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります。



Perl for Win32をサポートするようにIIS 4.0を設定するにはどうすればよいのでしょうか?

Microsoft IIS 4.0 は Windows NT Server 5.0に同梱され、PWS 4.0 は Windows NT Workstation 5.0 に同梱されています。IISとPWSは、共にMicrosoft Windows NT 4.0 Option Packの一部となっています。 Option Packへのリンクは http://www.microsoft.com/iis/にあります。

Perlスクリプトが動くようにIISやPWS 4.0を設定するには次のようにします。:

  1. IIS 4.0 Internet Service Managerを開きます。これで、ISM管理コンソールが出てきます。

  2. 左側のツリー表示から、マッピングするレベルを選択します。 既定のサーバ、Webサイト、または、仮想ディレクトリを選択することができます。

  3. 動作メニューからプロパティを選択します。

  4. 既定のサーバのプロパティを選択した場合、サーバプロパティダイアログが現れます。 マスタプロパティのプルダウンメニューからWWWサーバを選択し、マスタプロパティの下の編集ボタンをクリックします。 これでWWWサービスマスタプロパティが開きます。 ホームディレクトリタブを選択し、ステップ7に進みます。

  5. 既定のwebサイトのプロパティを選択した場合、Webサイトプロパティシートが現れます。ホームディレクトリタブを選択し、ステップ7に進みます。

  6. 仮想ディレクトリのプロパティを選択した場合、仮想ディレクトリプロパティシートが現れます。仮想ディレクトリタブを選択し、ステップ7に進みます。

  7. 構成ボタンをクリックします。すると、アプリケーションの構成ダイアログが開きます。

  8. アプリケーションのマッピングボタンを選択し、追加ボタンをクリックします。 アプリケーションの拡張子マッピングの追加/編集ダイアログが出てきます。

  9. CGIアプリケーションとしてPerlを実行するには、Perl.EXEのフルパスに続けて、%s %sを入力します。スクリプトが実行される時、最初の%sがスクリプトまでのフルパスに置き換えられ、2番目の%sはスクリプトのパラメータに置き換えられます。

  10. Perl for ISAPIを実行するには、PerlIS.DLLをフルパスで入力します。 %s %sはISAPI DLLには必要ありません。

  11. 拡張子欄には.pl または .plx(あるいは、好みの拡張子)を入力します。

  12. これでアプリケーションマッピングは完了しました。OKボタンをクリックし、それから、残っているダイアログ/プロパティシートをOKボタンをクリックして閉じます。

  13. IIS 4.0 Internet Service Managerを閉じます。

IIS はサービス(Windows NTサービスとは何ですか?)として実行されるので、 IIS がファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります。



Perl for Win32をサポートするようにNetscape web serverを設定するにはどうすればよいのでしょうか?

Netscape 1.x serversを使っている場合は、バッチファイルでPerlスクリプトをラップしなければなりません。 以下のNetscapeの技術ノートを参照してください。:


    http://help.netscape.com/kb/server/960513-3.html
    http://help.netscape.com/kb/server/960513-125.html

次の情報は、Netscape FastTrack Server 2.0用のものです。 他のNetscape Servers (Communications、Enterprise)の2.0と3.0も似たようなものです。

FastTrack Server上で動くようにPerl for Win32を設定するには、以下のステップに従ってください。:

  1. FastTrack Serverをインストールして、HTMLページを表示することができることを確認します。

  2. まだ、perlインタプリタとPerlスクリプトの関連付けをしていなかった場合は、関連付けを行います。 その方法は、perlとPerlスクリプトを関連づけるにはどうすればよいのでしょうか? を参照してください。 関連付けが終わった後、サーバの再起動が必要な場合があります。

  3. Perlスクリプトが動くようにShell CGIディレクトリを設定します。 通常のCGIディレクトリは実行可能ファイル専用となっているので、そこではPerlスクリプトは動きません。 設定は、FastTrack Administratorで行います。詳しくは付属ドキュメントを参照してください。

一般のディレクトリにあるPerl CGIスクリプトにアクセスしたい場合は、.plなどの拡張子をshellcgi MIMEタイプと関連付ける必要があります。 しかし、その前に少なくとも1つのShell CGIディレクトリを作成しておかなければなりません。 これでサーバでshellcgiが有効になります(作成したShell CGIディレクトリは削除することもできます。削除してもshellcgiは有効です)。 shellcgiと.plを関連付けるには以下のステップに従ってください。:

  1. Server Administratorで、Server Preferencesをクリックします。そして、左側のフレームを選択します。

  2. Perlスクリプト用の拡張子に.plを使う場合は、application/x-perl MIMEタイプを見つけ出して削除します (これはデフォルトでは.plにマップされています)。

  3. File Suffixとしてplを、Content Typeとしてmagnus-internal/shellcgiをMIME Typeに追加します。 magnus-internal/shellcgiというtypeが既に存在していた場合は、File Suffixのリストにplを追加するだけですみます。 その際、ファイル拡張子の先頭に.(ドット)を付けてはなりません。

  4. Save and applyボタンで変更を反映します。 これで、.pl拡張子を持ったスクリプトであれば、どのディレクトリにあろうがPerl CGIスクリプトとみなされるようになります。

Netscape server上でPerlスクリプトの実行に問題を生じた場合は、次の事項をチェックしてください。:

FastTrack serverのうれしい所の一つは、CGIスクリプトが動かない時にその詳細な理由をError Logに記録してくれることです。 設定の問題と思われるときは、まずこれをチェックするとよいでしょう。

Netscape serverはサービス(Windows NTサービスとは何ですか?)として実行されるので、 Netscape serverがファイルや環境変数を利用できるようにする特別なステップを踏む必要があります。

Netscape serverでは、PerlプログラムでPOSTされたデータを処理する際に問題が生じたと報告されることがあります。 差し当たり、Netscapeはスクリプトを実行するのに関連付けを使っており、また、POSTされたデータはSTDIN経由でプログラムに送られています。 そのため、リダイレクトにまつわる問題と関連している可能性があります。



Perl for Win32をサポートするようにWebSite 1.0を設定するにはどうすればよいのでしょうか?

次の情報は、(PerlISではなく)標準のCGIでPerl for Win32を使えるようにO'Reilly WebSiteを設定するためのものです。

  1. WebSiteをインストールします。次に進む前に、HTMLページを表示することができることを確認します。

  2. まだ、perlインタプリタとPerlスクリプトの関連付けをしていなかった場合は、関連付けを行います。 その方法は、perlとPerlスクリプトを関連づけるにはどうすればよいのでしょうか? を参照してください。 関連付けが終わった後、サーバの再起動が必要な場合があります。

  3. Perlスクリプトを格納する一般的なCGIディレクトリをセットします。 これは、Server Propertiesダイアログボックスを使って行います。

  4. スクリプトが、WebSiteサービスで使っているアカウントに読み取り可能になっているか確認します。 通常、これは、そのスクリプトをEveryoneグループに対して読み取り可能とすべきであるということを意味します。

  5. 使用するperlバイナリファイル、perlライブラリファイル、モジュールなどのすべてのサポーティングファイルが、WebSiteサービスに使用されるアカウント(Everyoneグループ等)に読み取り可能となっていることを確認します。

WebSite serverはサービス(Windows NTサービスとは何ですか?)として実行されるので、 WebSite serverがファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります。



Perl for Win32をサポートするようにWebSite Professionalを設定するにはどうすればよいのでしょうか?

次の情報は、(PerlISではなく)標準のCGIでPerl for Win32を使えるようにO'Reilly WebSite Professionalを設定するためのものです。

  1. WebSiteをインストールします。次に進む前に、HTMLページを表示することができることを確認します。

  2. Server Propertiesを開き、Mappingタブをクリックします。 erver Propertiesは、スタートメニューのWebSite Professionalフォルダにあります。

  3. MappingタブのリストセレクタからContent Typesを選択します。

  4. .plのような)使いたいと思っている拡張子が既にマップされていた場合は、そのマッピングをハイライトさせ、Deleteをクリックします。 Applyをクリックして、変更内容を直ちに適用します。

  5. .plのようなPerl用ファイル拡張子を決めたら、File Extension欄に入力します。 ファイル拡張子の頭に、ピリオド(.)を付け忘れないようにしてください。

  6. MediaあるいはServer-Side Content Type欄にwwwserver/shellcgiと入力します。

  7. Addをクリックします。Applyをクリックして、変更内容を直ちに適用します。

  8. リストセレクタをAssociationsに変更します。

  9. .plのような)使いたいと思っている拡張子が既にマップされていた場合は、そのマッピングをハイライトさせ、Deleteをクリックします。 Applyをクリックして、変更内容を即ちに適用します。

  10. File Extension欄にステップ5で選んだファイル拡張子を入力します。 ファイル拡張子の頭に、ピリオド(.)を付け忘れないようにしてください。

  11. Associated EXE or DLL欄にC:\Perl\5.00500\bin\MSWin32-x86\Perl.exeのようにPerl.exeまでのフルパスを入力します。

  12. Addをクリックします。Applyをクリックして、変更内容を直ちに適用します。

  13. Server Propertiesを閉じます。``Terminate active connections and update the server settings?''に適切に回答します。 これでサーバは、cgi-binとしてのマークを付けたディレクトリ及びドキュメントディレクトリでPerl CGIスクリプトを実行するように設定されました。

スクリプトの実行で問題が生じた場合は、 そのスクリプトがWebSiteサービスで使っているアカウントに読み取り可能になっているか確認します。 通常、これは、そのスクリプトをEveryoneグループに対して読み取り可能とすべきであるということを意味します。 使用するperlバイナリファイル、perlライブラリファイル、モジュールなどのすべてのサポーティングファイルが、WebSiteサービスに使用されるアカウント(Everyoneグループ等)に読み取り可能となっていることを確認します。

WebSite serverはサービス(Windows NTサービスとは何ですか?)として実行されるので、 WebSite serverがファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります。



Perl for Win32をサポートするようにPurveyorを設定するにはどうすればよいのでしょうか?

以下のインストラクションは、Purveyor 1.2 for Windows NT 用のものです。 他の Purveyor の製品も同様の手順です。

  1. Purveyorコントロールパネルで CGI Mappingタブを使って.pl拡張子を perl.exeにマップします。実行ファイルまでのフルパスを使うことを忘れないようにしてください。

  2. 同様にPurveyorコントロールパネルで、Virtual Servers sectionを使ってCGIスクリプトディレクトリを設定します。 サポートする各々の仮想サーバ毎に、スクリプトディレクトリが一つ必要です。 スクリプトディレクトリはサーバ用のデータパスの中に入っていなければなりません。 また、Disable CGI Extensionチェックボックスをチェックなしにするのを忘れないようにしてください。

  3. そのスクリプトがPurveyorサービスで使っているアカウントに読み取り可能になっているか確認します。 通常、これは、そのスクリプトをEveryoneグループに対して読み取り可能とすべきであるということを意味します。

  4. 使用するperlバイナリファイル、perlライブラリファイル、モジュールなどのすべてのサポーティングファイルが、Purveyorサービスに使用 されるアカウント(Everyoneグループ等)に読み取り可能となっていることを確認します。

Perl for Win32 が使えるように Purveyor を設定している時に問題が生じた場合、 Purveyorコントロールパネルアプレットの Logging タブにあるEnable Tracing チェックボックスを使うと、HTTPリクエストとレスポンスをトレースできるようになります。

Purveyorはサービス(Windows NTサービスとは何ですか?)として実行されるので、 WebSite serverがファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります。



Perl for Win32をサポートするようにWindows 95用 Microsoft Personal Web Server 1.0xを設定するにはどうすればよいのでしょうか?

Microsoft Personal Web Server for Windows 95 は、Microsoft Internet Information Serverのスケールダウン版です。 ドキュメントにはありませんが、 IIS で Perl for Win32 をサポートするのに使われる方法が Personal Web Server でも通用するようです。 IIS 3.0以下の場合、Perl for Win32をサポートするように設定するにはどうすれば よいのでしょうか? を参照してください。



他のWebサーバでPerl for Win32をサポートするように設定するにはどうすればよいのでしょうか?

あなたの Webサーバが掲載されていない場合は、そのサーバのドキュメントのCGIインタプリタの設定方法に関するところをチェックして下さい 。一般に、プロセスは次のようになります。:

ほとんどの Webサーバはサービス(IIS 3.0以下の場合、Perl for Win32をサポートするように設定するにはどうすれば よいのでしょうか? 参照)として 実行されるので、 ファイルや環境変数を確実に利用できるようにする特別なステップを踏む必要があります



私のプログラムは、コマンドラインからだとちゃんと実行できるのですが、CGIスクリプトとして実行するとうまく動きません。

たいてい、これは次の二つのうちのどちらかです:システムの設定に失敗しているか、あるいは、スクリプトが CGI スクリプトとしての適切な内容を出力してないか、です。

事を起こす前に、次のチェックをしてください:

確実にCGIプロトコル用の正しい出力を生成するスクリプトを使って、上記の情報をチェックします。 (まず、この FAQ にあるスクリプトを使うのがよいでしょう)。 テストスクリプトがうまく動くことを確かめたら、次は自分自身のスクリプトでやってみます。

スクリプトはサーバで実行されるものの、ブラウザにはエラーメッセージばかりが表示されるような場合、そこから抜け出すためのツールを利用しましょう。 CGI::Carpを使うと、ブラウザやログファイルにデバッグ情報を送ることができます。これは、スクリプトがコンパイルエラーを起こした場合でも、通常は捕捉してエラーを報告してくれます。 CGI::Carpを使うには、プログラムに以下の行を追加します:


    # The stuff in the BEGIN block will be executed very early
    # on, even before the rest of this script is parsed.
    #
    BEGIN {
        # Use the CGI::Carp module and import the carpout() function.
        #
        use CGI::Carp qw(carpout);
        # Send warnings and die messages to the browser.
        #
        carpout(STDOUT);
    }

スクリプトにエラーがあった場合は、次のようにブラウザに表示されます:


    [Wed Jun 3 09:32:28 1998] C:\inetpub\scripts\test.pl: Error message! at
    C:\inetpub\scripts\test.pl line 38.

時々他の人の立場になって考えてみるとよいでしょう。 libwww-perlバンドル(LWP)はCPANで入手できますが、Perl Package Manager(PPM)を使ってインストールすることもできます。 LWPは、将来リリースされるPerl for Win32には標準装備されているかもしれません。

LWPには強力なlwp-requestスクリプトが含まれています。 これを使うと、ブラウザの視点でものごとをみることができるようになります。 lwp-request http://localhostのように、URLと一緒にlwp-requestを起動すると、そのレスポンスの内容を見ることができます。 HTTPレスポンスのヘッダを調べるには、-deスイッチを付けてlwp-requestを起動します:


    C:\>lwp-request -de http://localhost
    Date: Wed, 03 Jun 1998 13:37:31 GMT
    Accept-Ranges: bytes
    Server: Microsoft-IIS/4.0
    Content-Length: 4325
    Content-Location: http://localhost/Default.htm
    Content-Type: text/html
    ETag: "0c1e58b063bd1:1237"
    Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT
    Client-Date: Wed, 03 Jun 1998 13:37:31 GMT
    Client-Peer: 127.0.0.1:0

このツールは、スクリプトが何を行っているのか正確に把握する際に大変役に立ちます。何事もあきらめてはなりません。 自分のwebサーバでPerlスクリプトを実行することは可能なのです。本当です。



とても悩んでいるのですが、 CGIディレクトリにperl.exeを入れたり、URLで使ったりしてはならないというのはどうしてなのでしょうか?

まず、警告しておきます。下記のことは絶対行なってはなりません。何故かわからなくても、とにかく行なってはなりません。

では、説明に移ります。 このアイデアは、perl.exeを(サーバで設定してある)CGIディレクトリに入れて、次のようなURL構文を使ってmyscript.plを実行するというものです:


    http://soon.to.be.a.victim.net/cgi-bin/perl.exe?myscript.pl

これだと、perl.exeなどのインタープリタと.plのような拡張子を関連付けるためのサーバの設定方法を理解する必要はありません。

事実、初期のWin32ベースのwebサーバ(特にNetscape 1.x server)では、インタプリタとスクリプトファイルを関連付けはできませんでした。 この方法は、webサーバ上でPerlスクリプトを実行するための実用的なアプローチとしてベンダが推奨していたものです。

素直ではなく、ちょっとしたPerlの知識がある人なら、この設定を使えばハッカーがサーバ上で恐ろしいことを始めることができるとわかるはずです。 あるドライブの全ファイルを削除するといったことを行うためにハッカーがしなければならないことといえば、perl.exe-eコマンドラインスイッチを使うだけです:


    http://aaaugh.that.hurts.net/cgi-bin/perl.exe?-e?'del%20c:\*.*%20/S%20/Q'

もちろん、実際のコンピュータ犯罪者はこのような粗野で明白なことは決して行わないでしょう。しかし、あなたの組織に修復不可能な損害を与えるための出発点としてこれを利用する可能性はあります。

次のURLでは、さらに深くこの問題を検討しています:


    ftp://cert.org/pub/cert_advisories/CA-96.11.interpreters_in_cgi_bin_dir

Tom Christiansenも、この問題について見事な論文を書いています:


    http://www.perl.com/perl/news/latro-announce.html

この問題を解決するための方策の一つは、pl2batや自分自身のカスタムバッチコードを使って、バッチファイルでPerlスクリプトをラッピングすることです。 但し、これはあまり上策ではありません。 ファイルの関連付けができないような初期のサーバの大半は、バッチファイル後でユーザにDOSコマンドの入力を許すといったバグを持っている可能性があるのです。

CGIとwebサーバのセキュリティに関する詳細は、以下のURLを参照してください:


    Web: http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html

最後に、Windows NT及びWindows 95には非常に多くの良質でフリーのwebサーバがあるのですから、古くて危険なwebサーバを使いつづけるのは止しましょう。



著者および著作権について

この FAQ は、元々Evangelo Prodromou evangelo@endcontsw.comが作成し、保守していたものです。 現在、この文書は、O'Reilly社のBrian Jepson及びActiveState社のDavid GroveとDavid Dmytryshynが改訂・更新しています。

このFAQはパブリックドメインですが、使用する場合はオリジナルの作者について明示してください。

ActiveState Home Page       Win32 FAQ