一部の共有ウェブホスティングサービスでは、サブドメインのドキュメントルートが、メインドメインのドキュメントルートの配下に作成されることがある。
たとえば、単一のウェブサーバで、ドメイン名「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