IIS 6.0 (Windows Server 2003) 雖已退役,但大量存量系統仍在運行。遷移、維護、故障排查時,這四大「經典配置坑」依然是 90% 問題的來源。本文給出**現象、根因、解決、驗證**標準化排查卡片,直擊痛點。
Server.MapPath() 報錯 80004005| 維度 | 內容 |
|---|---|
| 典型報錯 | Server.MapPath() 錯誤 ASP 0175 : 80004005 / 不允許的 Path 字符 / 在 MapPath 的 Path 參數中不允許字符 .. |
| 代碼特徵 | 使用相對路徑 ../、../../ 訪問上級目錄文件 (如 Server.MapPath("../include/conn.asp")) |
| 根因 | IIS 6.0 默認**禁用父路徑** (安全考慮),防止目錄遍歷攻擊 |
| 解決 | IIS 管理器 → 網站屬性 → **主目錄** 標籤 → **配置** 按鈕 → **選項** 標籤 → 勾選 **「啟用父路徑」** → 確定 → 刷新頁面 |
| 安全建議 | 啟用後,**嚴禁**在 Web 目錄下放置敏感文件 (配置、備份、源碼),防止 ../../web.config 類洩露。推薦改用絕對路徑或 Server.MapPath("/") 根路徑引用。 |
| 維度 | 內容 |
|---|---|
| 典型報錯 | HTTP 錯誤 404 - 文件或目錄未找到 (文件明明存在,靜態 .html 正常,動態 .asp/.aspx/.cgi 404) |
| 根因 | IIS 6.0 引入 **Web 服務擴展** 白名單機制,默認**禁止所有動態腳本執行** (ASP, ASP.NET, CGI, ISAPI, SSI 等) |
| 解決 | IIS 管理器 → **Web 服務擴展** 節點 → 選中 Active Server Pages / ASP.NET v4.0.xxxxxx / CGI 程序 → 右側點擊 **「允許」** → 狀態變為「已允許」 |
| 驗證 | 瀏覽器訪問 test.asp (含 <%=Now()%>) 應顯示時間而非 404 |
| 避坑 | 安裝 ASP.NET 後**必須**在這裡允許對應版本 (v2.0/v4.0),否則裝了也白裝 |
| 認證方式 | 適用場景 | 關鍵配置點 | 常見坑 |
|---|---|---|---|
| 匿名訪問 (默認) | 公網網站、API、靜態資源 | 賬戶:IUSR_機器名 (IIS 6) / IUSR (IIS 7+)密碼:勾選「允許 IIS 控制密碼」 權限:NTFS 讀取/執行 | 密碼不同步、賬戶禁用、NTFS 無讀取權限 → 401.3 |
| 基本身份驗證 | 內部 API、測試環境、需明文傳遞憑據 | 需 SSL 加密 (否則密碼明文傳輸) 域/本地用戶帳戶 | 未啟用 SSL → 安全風險極高;編碼問題導致中文用戶名失敗 |
| Windows 集成驗證 (NTLM/Kerberos) | 內網門戶、Intranet、單點登錄 (SSO) | IE/Edge/Chrome 需將站點加入「本地 Intranet」區域 服務器 SPN 註冊正確 (Kerberos) | 跨域/代理/負載均衡導致 NTLM 失效 → 回退基本認證或 401 |
| 摘要身份驗證 | 需防重放攻擊、不想上 SSL 的舊系統 | 需域控制器、Active Directory、反向加密存儲密碼 | 配置複雜、客戶端支持差、已淘汰 |
| .NET Passport | 歷史產物,已停用 | — | — |
標準解決步驟 (匿名訪問公網站點):
IUSR_機器名 → **取消勾選「允許 IIS 控制密碼」** → 手動設置強密碼 → 同步到 IWAM_機器名IUSR_機器名、IIS_WPG → **讀取和執行、列出文件夾內容、讀取**| 現象 | 根因 | 解決 |
|---|---|---|
| .asp 顯示源碼 / 提示下載 | ASP 未在 Web 服務擴展允許、或腳本映射缺失、或執行權限為「無」 | 允許 ASP 擴展;主目錄→配置→映射→.asp→可執行文件 C:\WINDOWS\system32\inetsrv\asp.dll;執行權限選「純腳本」 |
| .aspx 返回 404.3 / 500.19 | ASP.NET ISAPI 未註冊 / 版本衝突 / 管道模式不匹配 | aspnet_regiis -i (IIS 6/7 經典);應用程序池 .NET 版本/管道模式 (集成/經典) 匹配項目需求 |
| .php / .cgi 404/500 | 腳本映射指向錯誤 / FastCGI 模塊未安裝 / php.ini 路徑錯 | 映射 .php → php-cgi.exe (FastCGI);安裝 PHP Manager / 手動註冊 FastCGI 模塊 |
[ ] 靜態 .html/.css/.js/.jpg 正常訪問 (200) [ ] 動態 .asp 執行顯示時間 (啟用父路徑、Web擴展、匿名認證、腳本映射、NTFS權限) [ ] .aspx 頁面正常渲染 (ASP.NET版本、管道模式、應用程序池身份) [ ] 郵件發送/組件調用/數據庫連接正常 (COM+、MDAC、連接字符串、防火牆) [ ] 自定義 404/500 頁面生效 (目錄安全性→自定義錯誤→URL 格式 /404.htm) [ ] 日誌記錄正常 (網站屬性→網站→啟用日誌→W3C擴展格式→本地時間) [ ] 預設文檔含 index.asp/index.aspx/index.php/index.html (文檔標籤) [ ] 目錄瀏覽已禁用 (主目錄→目錄瀏覽→取消勾選) [ ] 父路徑按需啟用 (安全評估後) [ ] 請求限制/頻帶限制/連接超時按業務配置 (網站屬性→性能/網站標籤)
IIS 6.0 的四大經典坑 —— **父路徑、Web擴展、身份認證、腳本映射** —— 本質上是 **「默認安全策略過嚴」與「配置分散在多個標籤頁」的產物**。掌握上述標準化排查卡片,配合 NTFS 權限、COM+ 組件、應用程序池身份的「鐵三角」檢查,足以解決 95% 的遷移/部署/故障場景。對於仍在服役的 Windows 2003 老兵,這份清單請打印貼在機房牆上——下次故障來時,你能從容應對。