CGI(Common Gateway Interface)とは、、
CGI( Common Gateway Interface ) とはホームページからサーバ上のプログラムを起動させる仕様の事です。インターフェイス自体を示す事なので、特定の CGI 言語と言うものがあるわけではありません。逆にそのインターフェイス仕様に合うような実行ファイルであればどの言語でも記述できるという事です。例えば UNIX 系であれば、C 言語、シェルスクリプト、Perlなどがあり、WindowsNTでは C 言語、PerlやVisual Basic、Delphiといったものでも構いません。
サーバ側に処理をさせその結果を Web クライアントで受け取る事で、動的なホームページを作成する事が出来ます。動的なホームページと言うとJavaScript、VBScriptなど言ったものもありますが、違いを一言で言ってしまえば「 動作している場所が異なる 」という事です。 ( 下図参照 )
CGIプログラム
サーバ側で動作結果をWebクライアントで表示する。 (サーバサイド)

Webサーバで実行されたプログラムは、通常のページを出力します。 但し、通常のHTMLでは HTMLヘッダを記述する必要はありませんが ( Webサーバが自動で付けてくれている為 ) CGIプログラムから出力される結果に付いてはプログラマ自ら HTMLヘッダを付けWebクライアントにどういった情報が来るのかを知らせる必要があります。
JavaScript、VBScript等
Webクライアント側で実行して結果をWebクライアントで表示する。 (クライアントサイド)
メリット、デメリット
上の図でサーバサイドとクライアントサイドで実行している場所が異なるというのは理解して頂けたと思います。サーバサイドで行う CGIのメリットとして次のような点が上げられると思います。
- 非力なクライアントでも問題ない。処理はサーバで行ってクライアントは処理された結果を表示するだけなので、付加のかかる処理は発生しません。携帯電話などの端末からCGIを呼び出し結果を携帯電話で表示するといった事も可能です。
- ユーザに対し動作内容、情報の隠蔽が行えるということです、JavaScript等は作成したロジックは Webクライアントより簡単に閲覧することが出来ますしユーザ認証のパスワードなどもパスワードの隠蔽が非常が困難になってしまいます。こういったコードを記述する際には CGIをお勧めします。
CGI作成のメリットは当たり前のようですがユーザの入力、情報によって出力させる情報を変更できる ( 動的なサイトを作成できる ) と言う事です。これにより様々な事を Web上で行う事が可能になります。
しかし、Webサーバに負荷が集中してしまう事が考えられるため、簡単な処理まで行うのはあまりお勧めできません。できれば Webクライアントの入力チェックはクライアントサイドで行い入力されたデータに対する加工処理を CGIを用いサーバサイドで処理すると言った具合に、特性を生かし上手く組み合せた形態で作成して下さい。
確認点
先ず CGI を作成しようと意気込む前に次の点を確認して下さい。
加入しているプロバイダは個人の作成した CGI の利用を許可しているか?
当然ですが作成した CGIの利用が許可されていなければ作成しても意味が在りませんので先ずプロバイダのホームページか何かで確認して下さい。CGI を許可すればセキュリティの管理が当然難しくなるので CGIのを許可していなかったり、プロバイダが提供している CGIのみ許可してあったり CGIは利用できるが SSIは許可されていない等プロバイダによって様々です。
Perlが利用できるか
このホームページは Perl による作成を想定していますので他の言語による CGI の作成は作者の力量不足で済みませんがサポート出来ません。。。
注意点
Perl は元々 Unix系の OS で開発された処理系なので Windows で使用する時には色々な問題が起きて来るようです。例えば、Perl for Win 使用できない関数などが数多く在るようです。
CGI を作成する際に注意する点として、各プラットフォームの文字コードの違いがあります。UNIXでは標準で EUCという文字コードを、 Windowsでは Shift-JISと言った具合ですので、掲示板のような入力を受け付けるスクリプトを作成する場合は、入力データをそのまま保存してしまうと一つのファイルに複数の文字コードが存在していると言う状況が出てしまいます。こういった問題もプログラマ側で対応する必要があります。
セキュリティについて
作成したスクリプトによるトラブル
CGI は Webサーバ側で実行される為、サーバー上のコマンドを入力するのと同じようにプログラ ムを実行する事が出来ます。 つまり、スクリプトからシステムをクラッシュできるような事も可能なわけです。( セキュリティは掛かっており実際は起こる事は無いと思いますが )
サーバに負荷の掛かる永久ループなども問題です。複数のスクリプトで永久ループとなってしまえばサーバが負荷に耐えられずダウンと言う事も考えられます。 これらを十分考慮し、必ずローカルマシンでスクリプトを十分にテストを繰返してからスクリプトをサーバ へアップロードしましょう。
悪意の入力による危険性
ユーザからの入力を受け取りそれに対して処理を行うといった CGI を作成した場合には特に注 意する必要があります。例えばそのユーザが悪意を持った入力をしてきた場合、実行権限、ファ イルのセキュリティレベルにもよりますが最悪 root やユーザのパスワードを盗まれたりする事 も無いとは言えない訳です。
例えば open の引数として最後に `|' が付いた文字列を渡すと、コマンドとして実行してその 結果をブラウザ上に表示する事になる為パスワードなどが盗まれてしまいます。
こういった事を考え入力データに不正な文字が入っていないかチェックはしっかり行って下さい。
|