ASP 錯誤解碼 [QUERY_STRING,並可能會洩露中繼資料庫路徑資訊

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

261116
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
您使用 Response.QueryString 集合以擷取值從一個 URL 的結尾,但不會收到預期的值。傳回的值來代替可能是網際網路資訊服務 (IIS) 中繼資料庫資訊。
發生的原因
動態伺服器網頁 (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				
但是,如果值包含百分比符號和未對應到有效的字元 ("%5F 」 對應到底線 [_],) 集合的傳回值的十六進位值會是網站的中繼資料庫路徑形式的路徑。直接將透過 Response.Write HTML 列印該變數時,這可能會發生問題。

例如
Response.Write Request.QueryString("name")				
會印出:
LM/W3SVC/1/Root/VirtualDirectoryName					
解決方案
如果要解決這個問題,取得最新的 Service Pack 為 Windows 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
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,在結果會是 「 我那包含簽署 A %的名稱 」 如預期般運作。
狀況說明
Microsoft 已確認這是在 Microsoft Windows 2000 中的問題。

這個問題已經先在 Windows 2000 Service Pack 1 中獲得修正。

Warning: This article has been translated automatically

內容

文章識別碼:261116 - 最後檢閱時間:10/20/2013 19:43:22 - 修訂: 3.3

  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbwin2000sp1fix KB261116 KbMtzh
意見反應