ASP が QUERY_STRINGを誤ってデコードし、メタベースのパス情報を公開することがある

この記事は、以前は次の ID で公開されていました: JP261116
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
Response.QueryString コレクションを使い、URL の終わりから値を取り出そうとすると、期待する値を受け取れず、代わりに Internet Information Services(IIS) のメタベース情報が返されることがあります。
原因
Active Server Pages(ASP) 本来の要求オブジェクトには、HTTPを要求するときにクライアントからサーバーに送信する情報が含まれます。QueryStringコレクションには、URLの終わりで現れる名前や値が含まれます。たとえば次のようになります。
http://server/virtualDirectory/page.asp?name=value
この情報はURLコード化されます。


たとえば、
http://server/virtualDirectory/page.asp?name=my_value
は次のようになります。
http://server/virtualDirectory/page.asp?name=my%5Fvalue
ただし、有効文字にマップしないパーセント記号や16進法の値が含まれている場合("%5F" は、下線 [_] に該当します)、コレクションの戻り値はメタベース・パスの形でウェブサイトのパスになります。これは変数を Response.Write を使って直接 HTML に出力するときには問題となります。

たとえば、
Response.Write Request.QueryString("name")
が次のように出力されます。
LM/W3SVC/1/Root/VirtualDirectoryName
解決方法

Windows 2000

この問題を解決するには、Windows 2000 の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
260910 最新の Windows 2000 Service Pack の入手方法
また、この問題を解決するには、Server.URLEncode 機能をお使いください。この機能は QueryString に機能を追加する前に QueryString 値をコード化します。

たとえば、
Response.Redirect "http://server/virtualDirectory/page.asp?name=" & Server.URLEncode("My Name ThatContains A % Sign")

これを、次のように
Response.Write Request.Querystring("name")
Page.aspに name の値を出力すると、その結果は期待どおり " My Name That Contains A % Sign"となります。
状況
弊社ではこの問題を、この資料の冒頭に記載した Microsoft 製品の問題として認識しております。

詳細
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 261116 (最終更新日 2000-08-07) を基に作成したものです。

プロパティ

文書番号:261116 - 最終更新日: 02/12/2014 05:58:32 - リビジョン: 4.2

Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server

  • kbnosurvey kbarchive kbtshoot win2000presp1fix kbwinos2000bug KB261116
フィードバック