CGIとSSIの違い

CGI/SSIとは何ですか。また,この両者はどこが違うのでしょうか。


CGI(Common Gateway Interface)もSSI(Server Side Include)も,主にHTTPサーバーを経由して,プログラムなどを動作させるのに使われる技術です。これによって,WWW上でユーザーの反応に合わせた,動的なページを作ることができるわけです。
 SSIは,HTMLドキュメントにコメントの形で,
<!--#echo var="DATE_LOCAL"-->
といったコマンドを埋め込んで利用します。このHTMLドキュメントにユーザーがアクセスすると,HTTPサーバーがそれを解釈して実行し,結果をそのコマンドが埋め込まれているHTMLドキュメント内に表示できます。SSIを使えば,サーバーから日付や現在時刻を読み込んでそれをHTMLドキュメント内に表示するといったことが可能です。
 これに対してCGIのプログラムは,Cやsh,Perlといった言語で記述できます。そのため,SSIのようにHTMLドキュメントの中に埋め込むことはできませんが,より規模の大きいコマンドが実行可能です。CGIでは,ユーザーがブラウザを通じてCGIプログラムにアクセスすると,ブラウザの要求に対してサーバーがコマンドを実行し,その結果をブラウザに返します。結果をHTML形式で表示するには,タグを含んだ形で結果を出力するようにプログラムを組んでおく必要があります。CGIの利用例としては,掲示板が一般的なものとして挙げられます。
 CGIやSSIで絶対にしてはいけないのは,第三者が任意のコマンドを実行できるようにすることです。そうなると,第三者がサーバー上で好きなコマンドを実行できるため,大きなセキュリティホールになってしまいます。同じように,サーバーに負荷をかけるようなものも,そのサーバーを利用するほかのユーザーに迷惑をかけるため避けなくてはなりません。
 なお,SSIはCGIに比べると危険なものとされています。理由は,なんらかの方法でHTMLに好きなタグを埋め込めるような状況では,第三者が好きなコマンドを実行できてしまうからです。例えば,メールフォームなどで入力したデータを確認のためにブラウザで表示するといった場合に,そこに書かれたタグからサーバー上のコマンドが実行されてしまうのです。とくに,プロバイダがCGIとSSIの双方をサポートしている場合は注意が必要です。
 なお,CGIやSSIはすべてのHTTPサーバーで使えるとは限りません。自分の契約しているプロバイダの設定を確認してみてください。
(恣岡 悄)

図 CGIとSSIの概念図