在 Vista/Win7/Server 2008+ 的 IIS 7.x 中運行經典 ASP 應用,常遇到兩個經典問題:HTTP 500 內部錯誤不顯示詳細信息、父路徑引用 (../) 被禁用導致包含文件失敗。本文給出最小權限、最快生效的修復步驟。
False → True;效果:ASP 錯誤將直接在瀏覽器顯示錯誤碼、描述、文件路徑、行號,如:
Active Server Pages 錯誤 'ASP 0131'
不允許的父路徑
/Admin/index.asp,第 1 行
包含文件 '../Conn.asp' 不能用 '..' 表示父目錄。
False → True;原理: IIS 6 默認啟用父路徑,IIS 7+ 默認禁用以防止目錄遍歷攻擊。經典 ASP 大量使用 或 Server.MapPath("../"),遷移時必須開啟。
| 設置 | 風險 | 緩解措施 |
|---|---|---|
| Send Errors To Browser = True | 生產環境洩露堆棧、路徑、代碼片段給攻擊者 | 僅開發/測試/預發環境開啟;生產環境改用 自定義錯誤頁 (500-100.asp) + 詳細日誌寫入文件/EventLog/ELK |
| Enable Parent Paths = True | 惡意 ../ 遍歷讀取敏感文件 (web.config, 密碼文件, 源碼) | NTFS 權限嚴格最小化:匿名用戶僅有站點目錄讀/執行權,無系統目錄/父目錄權限; 請求篩選 規則阻斷 ..、:、% 等可疑路徑字符;應用代碼審計 確無動態路徑拼接注入點。 |
# ASP 詳細錯誤 → 僅本地/開發 IP 可見
# web.config
# 500.asp 記錄詳細錯誤到日誌/資料庫,返回友好頁面
<%
Dim err : Set err = Server.GetLastError()
If Not err Is Nothing Then
LogError err.Number, err.Description, err.Source, err.File, err.Line, Request.ServerVariables("REMOTE_ADDR")
End If
Server.ClearError()
%>
服務器暫時不可用,請稍後重試
結語: IIS 7+ 遷移經典 ASP,「詳細錯誤 + 父路徑」雙開是最快通關鑰,但生產環境必須配合 NTFS 最小權限、請求篩選、自定義錯誤頁、集中日誌 形成纵深防禦。將「開發便利」與「生產安全」解耦,才是遷移成功的標誌。