CGI Script
CGI
CGI
CGI(Common Gateway Interface)機能は、NCSA HTTPDなどWeb
サーバが提供する機能の一つです。この機能によって、Webブラウザ
からの入力をWebサーバを通してサーバが処理し、何かを保存したり
読みとったり、Webサーバを通して、情報をWebブラウザに返した
りできます。
フロ−図で示すと、
Webブラウザ (1)→ Webサーバ (2)→ サーバ
(HTTPD,etc.) (UNIX,etc)
←(4) ←(3)
となります。
プロセスをもう少し具体的に説明しますと、
(1) ブラウザからWebサーバにHTTPのGET,POSTメソッドを発行します。
(2) Webサーバは、サーバにCGIスクリプトを実行させます。
(3) Webサーバは、サーバから実行結果を得ます。
(4) Webサーバはブラウザに結果を返します。
のようになっています。
CGIスクリプト
Webサーバと同じシステム上で実行され、Webサーバからの要求に
応答するプログラムのことです。上のフロー図では、(2)から(3)にかけ
ての動作といえます。
CGIスクリプトはサーバ上で実行されますので、サーバのシステムに
ついても知っておく必要があります。
つまり、CGI機能を使いたいならば、
Webサーバへ送信するためのフォーム(HTMLファイル)、
サーバで動くCGIスクリプトのプログラミング、
サーバのシステム
について知っておく必要があります。
プログラミング言語とスクリプト言語
C、C++、Javaなどの「プログラミング言語」は数行の小さなプ
ログラムから数十万行に及ぶ大規模アプリケーションまで、システムプ
ログラムを含めて、あらゆる種類のプログラムが書けます。
これに対してJavaScriptなどの「スクリプト言語」は、コンピュータ
に命令を与えるという意味ではプログラム言語に他なりませんが、コー
ディングの量も比較的少なく、与える命令の種類も多くないという意味
で「スクリプト言語」と呼ばれます。
両者の違いは程度の問題です。
プログラミング言語
CGIのプログラムは、Webサーバと同じサーバ上で実行でき、標準入力
(stdin)と標準出力(stdout)ができれば、言語は問わないといえます。こ
のようなプログラミング言語としては、C、C++、Perl、シェルがあ
ります。
・CGIスクリプトを書く言語としてはPerlがよく使われます。
その理由として、
Perlはコンパイルする必要がない、
テキスト処理に優れている、
Cと同じように汎用的で強力、
セキュリティの面で優れている、
データベースに対応している、
という点があります。
・MicrosoftではActiveXがあります。
UNIXサーバを利用する人の場合
最低限必要な知識
・CGI機能を利用できるためには、現在でもWebサーバがUNIXシス
テム上で動いているケースが多いので、UNIXの使い方を知ることも必
要です。基本的コマンド、ファイル属性、パス、ディレクトリ構造
については熟知しておく必要があります。
・サーバでCGIの使用が許可されていること。
まず、CGIが利用可能かどうか管理者に問い合わせることです。
管理者からCGIスクリプトを置くディレクトリをもらう必要があります。
・スクリプト(Perlで書いたプログラム)では、
漢字コードはEUC、改行コードはLF、であること。
・ファイルのパーミッションは、8進数の755、であること。
・Perlのパスが正しく設定されていること。
例えば、 #!/usr/local/bin/perl
・ファイルを直接指定する場合、URL指定が正しいこと。
例えば、ドメインに続いて、/cgi-bin/mydirectory/test001.cgi
ところで、CGIスクリプトは、使い方によって、Webサーバに過度の
負荷をかける、セキュリティ・ホールの原因になる、など重大な問題を生じ
させます。
特に、EXECコマンドについてセキュリティ上の問題が大きいといえます。
ですから、Webサーバの管理者によっては、
・CGI機能を使えないように設定する、
・CGI機能を使えるように設定している場合でも、
初心者には許可しない、
知らずにリスキーなことする
初歩的なことまで質問されかえって面倒
信用のおけるユーザーなどに利用者を限定する、
EXECコマンドを実行禁止にする、
といえます。
つまり、誰にでも自由にUNIXサーバでCGI機能が利用できるとい
う訳ではありません。
安全なCGIスクリプトを書くための留意事項については、
http://hoohoo.ncsa.uiuc.edu/cgi/security.html
を見て下さい。
Windows95/NTでCGI
UNIXのサーバを直接利用できないならば、いっそのこと自分のパソコンの
Windows95/NTでCGIを勉強したいということになります。
そこで、自分のパソコンでCGIの勉強をするための手順について説明します。。
必要な準備
・Windows95/NT用の Perl ver.5 を入手し、インストールします。
(Cでもよいのですがコンパイラが必要ですし、動作させるまでがやっかいです。)
入手方法は、Perlのページを参照して下さい。
必要な設定をします。
・Windows95/NT用のWebサーバを用意します。
Windows95/NT用のWebサーバを入手します。
入手方法は、Web Serverのページを参照して下さい。
インストールし、必要な設定をします。
ネットワーク上にないマシンであれば、
サーバ名は、 localhost
IPアドレスは、 127.0.0.1
です。サーバをCGIの実験に使うのであれば上の設定でよい
でしょう。また、defaultでこの設定になっている場合が多い。
自分のパソコン上のブラウザから、自分のパソコン上のWeb
サーバにアクセスできるようにします。簡単なHTMLドキュメント
で確認できます。
CGIを使う
・アクセスできれば、次に、CGIスクリプト(Perlで書いたプログラ
ム)を直接指定してアクセスします。CGIスクリプトが動作すれば
実験成功です。
・次に、HTMLドキュメントからCGI機能を使うようにします。
・ここまでできればほぼ完璧です。あとは自由にCGIを使うことがで
きます。
自分のパソコンでCGIを勉強するのには、上のような作業が必要です。
またその際、ブラウザ、Webサーバ、Perlなどの正確な設定やコマンド
のために、TCP/IP、PATH、ALIAS、ファイルの関連付け、などに関してかな
りの知識が必要です。CGIスクリプトをC言語で書くのであれば、コン
パイルして実行ファイルを作る作業が必要です。
CGIの実際
富山大学では、セキュリティ確保のため、公式Webサーバの設定では
CGIの使用が禁止されています。従いまして、CGIは実行できません。
悪しからずご了承下さい。
上で述べてあるように、CGIを使いたければ、自分のパソコンに、
PerlおよびWebサーバをインストールしましょう。
SSI(Server Side Includes)
私のWebページでは、以前、アクセスカウンターを設けていました。
しかし、1998年8月から移った情報処理センターの新しいWebサーバにで
は、セキュリティの関係から、CGIやSSIが禁止されましたので、カウ
ンターを外さざるを得ませんでした。
以前に使っていたカウンターのCGIクリプトファイルは、
George Burgyan氏作成のものです。
入手方法:http://www.webtools.org/counter
(1) WebサーバのSSI(Server Side Includes)機能
・HTMLファイルにコマンドを埋め込むことによって、
ファイルの挿入、ファイル修正日時の表示、
CGIスクリプトの実行、シェルコマンドの実行
などを可能にする機能です。
・コマンドとしては、config, include, echo, fsize, flastmod,
exec があります。
・SSIの許可/禁止、あるいはコマンドの許可/禁止は
Webサーバで設定されます。
・サーバによってはSSIをサポートしていないものもあります。
Apache(for Windows),Xitami(for Windows) はSSI対応です。
(2) コマンドを埋め込むファイルについて
サーバに対して、サーバによる解析が必要であることを知らせるために、
・ファイルを作成し、その中にコマンドを埋め込みます。
・そのファイルの拡張子を、通常は、 .shtml とします。
拡張子の指定はWebサーバで設定されます。
Apache の場合、.shtml
Xitami の場合、.shtml, .shtm, .ssi
例: test-ssi.shtml
test-ssi.shtml (CGIスクリプトを指定)
------------------------------------------------
<!-- #exec cgi="/cgi-bin/test-ssi.pl" -->
------------------------------------------------
test-ssi.pl (CGI Script for Apache)
------------------------------------------------
#!/perl/bin/perl
print "Content-type: text/plain\n\n";
print "CGI Script \n";
print "Server Side Includes\n";
print "End of test-ssi \n";
exit(0);
------------------------------------------------
(3) コマンドの実行について
htmlファイルから、拡張子がshtmlのファイルが、
<A HREF="test-ssi.shtml" >test-ssi</A>
のようにして呼び出されたとき、
Webサーバはshtmlファイルを解析し、コマンドの実行を
サーバPCに命令します。
(4) exec コマンドの cmd と cgi
<!-- #exec cgi="xxxxx.pl" -->
<!-- #exec cmd="yyyyyy.pl" -->
cgiとcmdの場合のスクリプトの指定の違いに注意して下さい。
cgi:実行させるスクリプトはCGIスクリプトであること。
Perlスクリプトを指定すると、何も表示されない。
cmd:実行させるのはPerlスクリプト、実行ファイル、であること。
CGIスクリプトを指定すると、何も表示されない。
(5) SSIの詳細については、
NCSA を参照。
CGIの環境変数
例えば以下のような環境変数があります。出力例を含めて示しておきます。
AUTH_TYPE =
CONTENT_LENGTH =
CONTENT_TYPE =
GATEWAY_INTERFACE = CGI/1.1
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
HTTP_COOKIE =
HTTP_REFERER = http://127.0.0.1/
HTTP_USER_AGENT = Mozilla/4.03 [en] (Win95;I;Nav)
PATH_INFO =
PATH_TRANSLATED =
QUERY_STRING =
REMOTE_ADDR = 127.0.0.1
REMOTE_HOST = 127.0.0.1
REMOTE_IDENT =
REMOTE_USER =
REQUEST_METHOD = GET
SCRIPT_NAME = /cgi-bin/environment.pl
SERVER_NAME = localhost
SERVER_PORT = 80
SERVER_PROTOCOL = HTTP/1.0
SERVER_SOFTWARE = Xitami web server v2.2d(c)1991-1997 iMatix
CGIの参考書
・ローラ・リメイ著 武舎広幸・久野禎子・久野 靖訳
『続・HTML入門 −新機能,CGI,Webの進化』
(プレンティスホール出版,3900円)
ホームページの作り方のコーナーで推薦しましたが、CGIスクリプトの
説明についてもかなり紙幅を割いています。
技術的な側面も詳細に説明してあります。
有用なライブラリである、cgi-lib.pl, jcode.pl の説明もあります。
・秋本・古川著『CGIプログラミング入門』(翔泳社,1997),2800円
最近出た入門書です。UNIXについての説明もあります。
CDには有用なパッケージやソフトが収録されています。
例えば、cgi-lib.pl, jcode.pl, Perl Ver.4.036(for Windows95)です。
・Stephen Asbury, et al./アクロバイト監訳
『CGIパワフルテクニック大全集』インプレス(1997.8).4600円+税
PerlとCによるプログラムが多数掲載されています。
CD−ROMも添付されています。
UNIXの参考書
参考書として、
・中西 隆著『 UNIX活用ハンドブック』(技術評論社,1994),1900円
・K.Christian & S.Richter著 久野靖監訳
『 UNIXワールド』(丸善,1996),5974円
・山口和紀監修『The UNIX Super Text 上』(技術評論社,1992),3400円
・山口和紀監修『The UNIX Super Text 下』(技術評論社,1992),3700円
などがあります。上から下へ順に、専門性が高くなっています。