用語辞典・サーバー・Web運営

ドキュメントルート

ドキュメントルートとは

ドキュメントルートは、Webサーバーが公開ファイルを探す起点となるディレクトリです。英語ではdocument root(ドキュメント・ルート)と表します。

たとえば文書ルートが/var/www/exampleなら、URLパス /images/logo.webpを、その下のimages/logo.webpへ対応させる基本構成があります。

文書ルートは公開境界です。ソースコード、パスワード、バックアップ、ログなど、URLから配る必要のないデータは外へ置きます。

URLパスから公開木構造だけへ到達させ、設定・秘密・バックアップを境界外へ置く公開する完成ファイルと内部の制作データを分離する
Webサーバーの公開ディレクトリー木構造にHTML、CSS、画像だけを置き、設定、秘密、ログ、バックアップを鍵付きの境界外へ分離するピクトグラム図解
図1公開対象を選んで複製する方式なら、作業フォルダーにある非公開ファイルを誤って一緒にアップロードしにくくなります。

URLとファイルパスを対応させる

URL利用者が要求するパス

/guide/start/のように、ドメインより後ろの公開名として表す。

MappingWebサーバーが規則を適用する

文書ルート、索引、別名、書き換え、アクセス規則から処理先を決める。

Filesystem公開ディレクトリー内を探す

guide/start/index.htmlなど、許可されたルートの下のファイルを読み取る。

サーバールートやホームディレクトリーとは違う

Webサーバーソフトウェアの設定・ログを置くサーバールート、利用者アカウントのホームディレクトリー、アプリケーションのプロジェクトルート、OSのファイルシステムルートは別です。名称にルートが付いても役割は一致しません。

レンタルサーバーではドメインごとにpublic_htmlなどのディレクトリーが文書ルートとして割り当てられます。管理画面が示す対象ドメインと絶対パスを確認してアップロードします。

ディレクトリーURLは索引ファイルへ対応できる

/about/への要求でabout/index.htmlを返すのはDirectoryIndexなどの設定です。索引ファイルがなくディレクトリーlistingが有効だと、ファイル一覧を表示してしまう場合があります。

listingを不要なら無効にし、索引ファイルを置きます。大文字・小文字を区別するファイルシステムでは、Logo.webplogo.webpは別ファイルです。

すべてのURLが実ファイルとは限らない

書き換えやアプリケーション経路制御により、/articles/42を一つのindex.phpへ渡す構成があります。別名で文書ルート外の特定ディレクトリーを別URLへ対応させることもできます。

したがって404を調べるときは、ファイルの存在だけでなく、仮想ホスト、文書ルート、書き換え、別名、権限、アプリケーション経路を順に見ます。

ルート相対URLはドメインの公開ルートが基準

HTML内の/assets/site.cssは、現在のページディレクトリーではなくドメインのルートから探します。HTTPサーバー上では文書ルートのassets/site.cssへ対応します。

HTMLをfile://で直接開くとドメインのルートがないため、ローカルディスクのルートを参照して失敗する場合があります。正確な確認にはローカルHTTPサーバーを使います。

公開用フォルダーだけをアップロードする

ビルド前のソース、設計書、生成確認画面、環境設定、試験データ、データベース書き出し、エディターの一時ファイルを文書ルートへ置きません。公開できる成果物だけを別フォルダーへ出力し、その中身をアップロードします。

.env.git、バックアップの.zip.sql、ログ、旧ファイルは特に危険です。Webサーバーが拡張子を実行しなくても、平文テキストとして配る可能性があります。

パス横断とsymlinkを境界で止める

利用者入力をファイル名へそのまま連結すると、../などでルート外へ進むディレクトリー横断が起き得ます。正規化後のパスが許可ルート内に収まることを確認し、可能ならIDから固定パスを引きます。

symbolicリンクがルート外を指す場合の追跡可否も設定します。リンクを置いただけで安全な境界になるわけではありません。

読取と実行、アップロード先を分ける

Webサーバー処理には公開ファイルを読む最小権限だけを与えます。利用者がアップロードしたファイルを置くディレクトリーではスクリプト実行を禁止し、拡張子だけでなくコンテンツタイプ、大きさ、画像再符号化、保存名を検査します。

アプリケーションが書き込める場所とプログラムコードを同じにすると、アップロードや改ざんからコード実行へつながります。リリースファイルは原則読み取り専用にします。

仮想ホストごとに別ルートを持てる

同じサーバーでもexample.jpshop.example.jpへ異なる文書ルートを割り当てられます。片方のディレクトリーをもう片方から読めないようOS権限も分けます。

文書ルートを決めることは、URLから見せるものと見せないものの境界を決めることです。公開に不要なデータを置かないのが最も確実な防御です。

document rootとURL mappingの確認資料:Apache HTTP Server「Getting Started」Apache HTTP Server「Mapping URLs to Filesystem Locations」

関連用語