CGI
Common Gateway Interface

はじめに

CGI とは、Common Gateway Interface の略であり、Webサーバの提供する機能です。(Computer Generated Image ぢゃないよ)
Webブラウザからの要求でサーバが別プログラムを起動し、結果をそのブラウザに返すという仕組みになっています。

これを利用して、さまざまなことをサーバに行なわせることができるわけですが、多くのプロバイダでは ユーザ レベルの CGIスクリプト(プログラム)設置について制限をかけています
まったく設置を認めていないプロバイダも少なくありません。
また、制限付きで許可しているプロバイダでも CHATプログラム等は サーバへの負荷がとても大きく、許可されない可能性が高いと思われます。

CGIスクリプトは、それ自体 プログラム です。ユーザ全員の共有サーバでプログラムを走らせるわけですから、暴走させたり、ファイルやディスクを破壊したりすることがないようにしなければなりません
異常な動作によって、そのサーバのユーザ全員(もしかすると全世界)に迷惑がかかる可能性を常に認識しておくべきです。

一般的に、CGIスクリプトは、プロバイダでは頒布しておりません。あなたがセキュリティに配慮したプログラムを書けるならば、あなた自身で用意するか、または 各自 素性の知れた(いわゆる有名な)サイトから、自らダウンロードして入手してください

なお、Web上で出回っているスクリプトには、SSI (Server Side Include)を使用するものもありますが、SSIはCGIよりも危険と考えられており、ほとんどのプロバイダでは使用を許可しておりません。 (動作させようとしても、もともと動かないように設定されています。CGIも、多かれ少なかれ SSIと同じようなところはあるのですが・・・)。

SSI や CGI は、サーバ上で 各種プログラムを実行させることができます。
つまり、危険なコマンドが実行される可能性があり、作成/設置者がその危険性を認識していなければ、意図しない副作用による障害が発生したり、システム侵入の踏み台とされ、他のサイトのクラッキングに悪用される可能性も大きくなります。
また、中には悪意を持って作成されたものや、セキュリティが甘いスクリプトも存在します。とにかく、十分ご用心を。

使用言語

一般的に、使用できる言語は、perl です。もちろん、コンパイルしたバイナリでも動作するわけですが、多くのプロバイダではユーザに Shell を解放していませんので、事実上不可能です。

perlのプログラムでは、スクリプトの先頭に、設置サーバでの「 perl の PATH 」を記述する必要があります。
この PATH は、サーバによって異なりますが、たいていは「/usr/local/bin/perl」か、「/usr/bin/perl」になっていると思います。
なお、 perlの Version によっては動作できないスクリプトもあります。
perl-5専用に作成されたスクリプトは perl-4では 正常に動作しません
(まあ、いまどき perl-5がインストールされていないサーバなんて無いとは思いますが)

スクリプトの修正

Web上からダウンロードしたスクリプトは、Webサーバおよび設置ディレクトリの環境に合わせて修正しなければ、絶対に動作しません。
perlスクリプトは、TEXTファイルになっていますから、EDITORで修正可能です。(ホームページ ビルダ等のWebページ作成支援ソフトではうまく修正できない場合が多いようですので、単なるEDITORを使うことをおすすめします)

修正について、スクリプトに付属している README 等の解説ファイルを読んでも「さっぱりわからない」という方は、設置をみあわせてください。
少なくとも、「ここがわからない」というように自分が判らない箇所がどこなのか判る程度には勉強してください。(^^;)
どこが判らないのか判ったら、スクリプトの配布元 または ISPに質問メイルを書きましょう。(当然ですが、ISPは、サーバ側の質問にしか答えてくれません)

ファイル転送とパーミッション設定

CGIスクリプト ファイルは、定められたディレクトリ内であれば、動作するようになっています。
プロバイダによっては、ユーザ ディレクトリ内の例えば ./cgi-bin/ という名前のディレクトリに設置しないと動かないように設定してある場合がありますので、ここらへんはプロバイダに確認する必要があるかもしれません。その場合は、適宜ディレクトリを作成して転送してください。
このとき、CGIファイルは必ず テキスト・モード(ASCIIモード) で転送する必要がありますので注意してください。
FTPソフトによっては「自動モード」を設定できるようになっていますが、それではダメな場合があります。(サーバ エラーになる)

また、CGIを動作させるには、必ず「パーミッションの設定」をしなければなりませんが、shellが使えない場合は、FTPソフトで設定することになります。このため、サーバに chmodコマンドを送ることのできるFTPソフト(WS_FTPやWinFTPなど)を使用する必要があります

一般的に、CGIスクリプトファイル(なんとか.cgi または *.pl)は、パーミッションを 7 5 5 に設定。データファイルの方は 6 6 6 に設定します。これらのパーミッション設定は、絶対間違えないでください。 セキュリティ ホールになる危険性もあります。

また、ディレクトリのパーミッションも重要です。 7 7 7 なんていう誰にでも書き込み可能なディレクトリは非常に危険です。

.htaccessファイル

CGIスクリプトの解説書等に「.htaccess」ファイルを作って設定の必要があるように書いてあることがありますが、これが必要ではないサーバも多くあります。
スクリプトの記述や転送方法が正しいのにもかかわらず サーバ エラー が出る場合は、「.htaccess」ファイルを削除してみることをおすすめします。
CGIのセキュリティ

サーバ管理者側からみると、CGIは非常に危険です。解放しなくてもいいのなら、それにこしたことはありません。はっきりいって、ほとんど何でもアリですからね。
しかし、ユーザ側の要請もあるでしょうし、CGIを解放した方がそれなりに活気は出ると思うし・・で、結局、危険を承知でCGIを解放することになるわけです。(^^;)。

WebサーバにApacheを使っているのなら、SuEXECという機能を使うことをおすすめします。これで、ユーザディレクトリ外のプログラム実行を止めます。どうしてもsendmailをCGIから呼び出したい場合は、シンボリックリンクなどでsendmailのみ実行可能にします。
どうせshellは解放していないのだから、一般ユーザには /bin/* などのプログラムは実行できないようにしてしまうべきでしょう。
なお、SuEXECは、Apacheのconfigure時にオプション指定しないといけません。


前ページに戻る