SSIは許可するがプログラム実行(exec)だけは禁止したい

» 2002年06月26日 00時00分 公開
[木田佳克ITmedia]

この記事は会員限定です。会員登録すると全てご覧いただけます。

 ApacheでSSI(Server Side Include)を利用する際、場合によっては実行できる内容をカスタマイズしたいことがある。SSIすべてを許可すると、次のようなものがすべて実行されるからだ。

All MultiViewsを除いた以下のようなすべてが利用可能
Indexes インデックス表示を有効にする
Includes SSIを有効にする
IncludesNoExec SSIを有効にするが、EXEC命令(CGIプログラムを実行する命令)は無効にする
FollowSymLinks シンボリック先へのアクセスも許可する
FollowSymLinksIfOwnerMatch シンボリック先のアクセスはオーナー権限が一致しないと許可しない
ExecCGI CGIスクリプトの実行を許可する
MultiViews 言語ネゴシエーション機能を有効にする(参考Tips:「ApacheのMultiViews機能ってなに?」)
SSI(ディレクトリ)指定で使用されるオプション

 上記のオプション(パラメータ)は、次のようにApacheの設定ファイル「httpd.conf」内で使用される(以下は、Red Hat Linux 7.xなどのRPMパッケージでインストールしたディレクトリ構成)。

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html>
Options All
AllowOverride None
</Directory>
<Directory /var/www/cgi-bin>
Options None
AllowOverride None
</Directory>

 上記の中で、Directoryに続くディレクトリ指定が特定の個所に実行権を定義している個所だ。「/」はhttpで公開するディレクトリ下すべて、「/var/www/html」は通常htmlファイルや画像ファイルなどを置くディレクトリ下、「/var/www/cgi-bin」はCGI実行を許すディレクトリ下といった具合だ。

 Optionsに続く指定は、上記リストで解説をした各オプションに相当する。許可をしたいものだけを記述すればよいわけだ。例えば次のように指定した場合、

Options FollowSymlinks Includes

 「FollowSymlinks」「Includes」が有効になり「ExecCGI」は無効となる。代表的なオプションのそれぞれの具体的な許可内容も見ていこう。

Includes

 Optionsに「Includes」を記述した場合には、次の指定が有効になる。

<!--#exec cmd="..."-->
<!--#exec cgi="..."-->
<!--#include file="..."-->

IncludesNoExec

 Optionsに「IncludesNoExec」を記述した場合には、次のようになる。

<!--#include file="..."-->

は有効になるが、

<!--#exec cmd="..."-->
<!--#exec cgi="..."-->

といったプログラム実行(exec)は制限される。htmlファイル内に他のファイルをincludeしたいものの、プログラムの実行(表示結果を取り込まない)を禁止したいといった場合に指定すればよいだろう。

FollowSymLinks

 このオプションは、シンボリックリンクを有効(許可)にするかどうかである。シンボリックリンク自体についてはほかのTipsを参考にしてほしい。FollowSymLinksオプションが指定された場合、ディレクトリ下にリンクが存在すると、先へたどることができるようになるのだ。

 ただし、万が一自分が把握してないシンボリックリンクがあった場合には、情報漏洩(ろうえい)に結びついてしまう危険性がある。このため、ディレクトリ下すべてのファイルを把握している個所のみを指定しよう。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ