Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

解決 Windows Server 2008 IIS 7 無法顯示驗證碼 (ASP 頁面) 問題:啟用父路徑

編輯:Windows XP 系統介紹

Windows Server 2008 安裝 IIS 7 後,ASP 應用程式驗證碼 (CAPTCHA) 圖片無法顯示,經排查為 IIS 7 預設關閉「啟用父路徑」導致相對路徑引用失敗。

問題現象

  • ASP 頁面正常開啟,但 `` 或 `Server.MapPath("../include/config.asp")` 類相對路徑資源 404/顯示紅叉。
  • 錯誤日誌:`Active Server Pages, ASP 0131 (0x80004005) Disallowed Parent Path`。

根因分析

IIS 6/7/7.5/8/8.5/10 預設 `enableParentPaths = false` 為安全考量,防止目錄遍歷攻擊。傳統 ASP 應用大量使用 `../` 相對路徑引用共用元件,需明確啟用。

解決步驟 (IIS 7 管理主控台)

  1. 開啟「Internet Information Services (IIS) 管理員」 (inetmgr)。
  2. 左側連線樹狀展開:伺服器名稱 → 「網站」→ 目標網站 (如「Default Web Site」)。
  3. 中間功能檢視雙擊「ASP」圖示 (若無,需「角色服務」安裝「ASP」)。
  4. 「ASP」設定頁 → 「行為」區段 → 「啟用父路徑」 → 將 `False` 改為 `True`。
  5. 右側「動作」面板 → 「套用」。
  6. 回收應用程式集區:左側「應用程式集區」→ 目標集區 → 右鍵「回收」。

替代方案:web.config 設定 (適用共用主機/無管理員權限)

在網站根目錄 `web.config` 中加入:

<configuration>
  <system.webServer>
    <asp enableParentPaths="true" />
  </system.webServer>
</configuration>

需確認伺服器層級 `applicationHost.config` 未鎖定 `` 區段 (`overrideModeDefault="Allow"`)。

安全性考量與緩解措施

  • 啟用父路徑後,惡意 ASP 可透過 `../../` 讀取系統敏感檔案 (web.config, global.asa, 資料庫連線字串)。
  • ✅ 緩解:
    ① 應用程式集區身分識別使用專用低權限帳戶 (非 NetworkService/LocalSystem)。
    ② NTFS 權限:網站根目錄僅授予該帳戶「讀取/寫入/執行」,上層目錄拒絕存取。
    ③ 部署 URL Rewrite 規則封鎖 `..` 路徑存取非應用目錄。
    ④ 規劃遷移至 ASP.NET Core / PHP / Node.js 現代架構,棄用傳統 ASP。

驗證修復

  1. 瀏覽器開啟驗證碼頁面 → 圖片正常顯示。
  2. F12 開發者工具 → Network 確認 captcha 回應 200 OK、Content-Type: image/jpeg (或 gif/png)。
  3. 功能測試:輸入驗證碼送出表單 → 伺服端驗證通過。

補充:IIS 7 角色安裝關鍵點

  • 「伺服器管理員」→「角色」→「新增角色」→「Web 伺服器 (IIS)」。
  • 「角色服務」務必勾選:「ASP」、「ISAPI 延伸模組」、「ISAPI 篩選器」、「CGI」、「伺服器端包含 (SSI)」。
  • 安裝完成後,「管理工具」→「Internet Information Services (IIS) 管理員」即可管理。
Copyright © Windows教程網 All Rights Reserved