PHPはドキュメントルート外へアクセスできるけど制限もできる

ドキュメントルートとは

ドキュメントルートとは、Webサーバで表示するコンテンツ(htmlファイルやphpファイル等)が配置された最上位のディレクトリです。つまりクライアントがWebサーバから表示できるページは、ドキュメントルートで指定されたディレクトリ配下のファイルに制限されます。

Apache では /etc/httpd/conf/httpd.conf で以下のように設定します。

DocumentRoot "/var/www/html"

ドキュメントルートの上や横のディレクトリに行けるPHP等のCGI

PHP等のCGIを使う場合、httpd のドキュメントルートの上や横など、ドキュメントルート外へのアクセスが出来てしまいます。例えば ドキュメントルートが /var/www/html なのに、 /usr/local/share 等のパスのファイルを表示させることができます。

これは、ドキュメントルートがあくまでクライアントが直接アクセスできるファイルの範囲を示しているのに対し、アクセスしたPHPファイルは "PHP interpreter" を介してLinux内を自由に横断できるためです。

このスクリプトの行動範囲を制限するには、chrootによりapacheの行動範囲を制限するか、/etc/php.ini 内でのopen_basedir でアクセスできるディレクトリを指定します。例えば、 /var/www/html と /var/www/cgi に限定する場合は /etc/php.ini に以下のように設定します。

open_basedir /var/www/html:/var/www/cgi

これによりディレクトリ・トラバーサル攻撃を防ぐことができます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする