Apacheの小技 - サブドメインのドキュメントルートディレクトリへのメインドメインからのアクセスを禁止する

一部の共有ウェブホスティングサービスでは、サブドメインのドキュメントルートが、メインドメインのドキュメントルートの配下に作成されることがある。

たとえば、単一のウェブサーバで、ドメイン名「example.com」と、そのサブドメイン名「sub.example.com」をホストしており、そのディレクトリ構造が以下のようになっているとする。

example.com - index.html
           |
           |- sub.example.com - index.html

ここで、example.comディレクトリはメインのドメイン名である「example.com」のドキュメントルートであり、同様にsub.example.comディレクトリは、サブドメイン名「sub.example.com」用のドキュメントルートである。

このような場合、メインのドメイン名のウェブサイトから、サブドメイン名のウェブサイトのコンテンツにアクセスできてしまう。すなわち

http://example.com/sub.example.com/index.html

をリクエストすることによって、

http://sub.example.com/index.html

にアクセスできてしまう。これは、単純に気持ち悪いし、セキュリティ上のリスクにもなり得る。

サブドメインのコンテンツに、メインドメインからアクセスされるのを防ぐためには、ApacheのSetEnvIfとDenyを用いるとよい。具体的には、以下の二つの位置に.htaccessを設置する。

  • example.com/.htaccess
  • example.com/sub.example.com/.htaccess

それぞれの.htaccessの内容は以下のとおり。

example.com/.htaccess

SetEnvIf Host “^example\.com$” VHOST_MAIN

example.com/sub.example.com/.htaccess

Deny from env=VHOST_MAIN

処理の内容を説明すると、まずメインサイト側の.htaccessで、Hostヘッダがexample.comの場合にのみ、環境変数VHOST_MAINを設定する。サブサイト側の.htaccessでは、環境変数VHOST_MAINが定義されている場合のみ、ディレクトリコンテンツへのアクセスを拒否する。これにより、メインのドメイン名を経由してサブドメイン用のディレクトリにアクセスすることを防げるわけである。


| | 2007-03-07 06:17

Comment

Commenting is closed for this article.