Classic ASP の親パスは既定で無効

作成者 : Robert McMurray
発行日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))
更新日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))

Classic ASP の親パスを使用すると、開発者はファイルやフォルダーへのパスに ".." を含む相対アドレスを使用することができます。たとえば、以下のコードは親パスをマッピングする ASP ページを示しています。

<%
   Response.Write Server.MapPath("../example.asp")
%>

また、以下のコードは親パスを使用するフォルダー内のインクルード ファイルを参照する ASP ページを示しています。

<!--#include file="../_fpclass/fpdblib.inc"-->

IIS の初期のいくつかのバージョンでは、既定で親パスが有効になっていました。IIS 6.0 で、親パスは無効となるよう既定の動作が変更されました。これは、親パスの実行を防ぐことにより、セキュリティやアプリケーションの境界を越えたコンテンツが含まれることがないようにするためのセキュリティおよび設計上の理由から行われました。既定では、Classic ASP スクリプト エラー メッセージは Web ブラウザーに送信されず、親パスの使用を試みると次のエラー メッセージが Web ブラウザーに返されます。

URL の処理中にサーバー上でエラーが発生しました。システム管理者に連絡してください。

If you are the system administrator, please click here to find out more about this error.

( : 上記の ASP スクリプト エラー メッセージは、カスタマイズすることができます。詳細については、「Classic ASP スクリプトのエラー メッセージはもはや既定では Web ブラウザーに表示されない」を参照してください。)

ASP スクリプト エラー メッセージの送信を有効にして、Classic ASP スクリプトが親フォルダー内のパスのマッピングを試みた場合、次のエラー メッセージが Web ブラウザー内で表示されます。

Server.MapPath() error 'ASP 0175 : 80004005'

許可されていない Path の文字です

/test/example.asp, line 100

'..' 文字は MapPath メソッドの Path パラメーター内では許可されていません。

IIS 7.0 で Classic ASP スクリプトが親パスを使用するページを含めようと試みた場合、次のエラー メッセージが Web ブラウザー内で表示されます。

Active Server Pages error 'ASP 0131'

許可されていない親パスです

/test/example.asp, line 100

親ディレクトリを示す '..' は、インクルード ファイル '../_fpclass/fpdblib.inc' に含められません。

ユーザー アクセス制御の操作

このドキュメントの手順は、完全な管理アクセス許可を持つアカウントを使用して実行する必要があります。次のいずれかの方法を使用することをお勧めします。

  • ローカル管理者アカウントを使用してコンピューターにログインします。
  • ローカル管理者アカウント以外の、管理アクセス許可を持つアカウントを使用してログインする場合は、すべてのアプリケーションとコマンド プロンプト セッションを [管理者として実行] オプションを使用して開きます。

Windows Vista および Windows Server 2008 では、ユーザーアカウント制御 (UAC) セキュリティ コンポーネントにより IIS 7 構成設定への管理目的でのアクセスが制限されるため、上記の条件が必要となります。UAC の詳細については、次のドキュメントを参照してください。

親パスの問題の解決

仮想パスを使用する

ASP コード内で親パスを使用する代わりに、仮想パスを使用できます。仮想パスには、Web サイトの URL ルートからの完全なフォルダー パスを入力する必要があります。たとえば、次のように入力します。

マッピング パス :

<%
   Response.Write Server.MapPath("/test/example.asp")
%>

インクルード パス :

<!--#include virtual="/_fpclass/fpdblib.inc"-->

ASP 親パスを有効にする

親パスは、IIS マネージャーを使用して有効または無効にできます。それには、IIS マネージャーを開いて、親パスを構成するサイトまたはアプリケーションに移動して、[ASP] 機能をダブルクリックします。

Ee175738.Classic ASP Parent fig1(ja-jp,TechNet.10).jpg

ASP 機能リストで、[親パスを有効にする] オプションを構成します。

Ee175738.Classic ASP Parent fig2(ja-jp,TechNet.10).jpg

また、この設定は、AppCmd.exe コマンドライン ツールで次の構文を使用して構成することもできます。

appcmd.exe set config "Default Web Site" -section:system.webServer/asp /enableParentPaths:"False" /commit:apphost

詳細情報

Classic ASP に使用可能なオプションの詳細は、Microsoft IIS.net (英語) Web サイトで IIS 構成リファレンスの以下のページを参照してください。

http://www.iis.net/ConfigReference/system.webServer/asp

IIS での親パスのその他の詳細については、Microsoft サポート技術情報の次のページを参照してください。

IIS 6.0 では、デフォルトで [親のパスを有効にする] チェック ボックスがオフになっている
http://support.microsoft.com/kb/332117