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

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

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG