web.config 是 ASP.NET 應用程式安全防線的中樞。本文聚焦四大核心安全節點:<authentication>、<authorization>、<customErrors>、<pages>,提供生產環境就緒的配置範本與原理解析。
<system.web>
<!-- 模式:None / Windows / Forms / Passport -->
<authentication mode="Forms">
<forms
loginUrl="~/Account/Login"
name=".ASPXAUTH"
defaultUrl="~/Dashboard"
timeout="30"
path="/"
protection="All"
requireSSL="true"
slidingExpiration="true"
cookieless="UseDeviceProfile"
domain=""
/>
</authentication>
</system.web>
關鍵點:requireSSL="true"強制 HTTPS 傳輸認證 Cookie,防止中間人竊取;protection="All"確保 Cookie 加密與簽名防篡改。
<authorization>
<!-- 允許所有已驗證使用者 -->
<allow users="?" /> <!-- ? = 匿名使用者 -->
<deny users="*" /> <!-- * = 所有使用者 (含已驗證) -->
<!-- 實際生產常見模式:預設拒絕匿名,特定頁面放行 -->
<deny users="?" /> <!-- 封鎖匿名 -->
<allow users="*" /> <!-- 允許已驗證 -->
<!-- 特定角色/使用者精細控制 -->
<allow roles="Admin,Editor" />
<deny users="*" />
</authorization>
machine.config。<allow>/<deny>。<allow users="*" /> (全開)。最佳實踐:根目錄預設拒絕匿名 (<deny users="?" />),子目錄 (登入頁、靜態資源) 覆蓋允許匿名 (<allow users="?" />)。
<customErrors mode="RemoteOnly" defaultRedirect="~/Error/500">
<error statusCode="403" redirect="~/Error/403" />
<error statusCode="404" redirect="~/Error/404" />
<error statusCode="500" redirect="~/Error/500" />
</customErrors>
| mode 值 | 行為 | 適用環境 |
|---|---|---|
| On | 所有用戶看自定義錯誤頁 | 生產環境 (若無遠端除錯需求) |
| RemoteOnly | 本機看詳細錯誤 (含堆疊)、遠端看自定義頁 | 生產環境推薦 (平衡除錯與安全) |
| Off | 所有人看詳細錯誤 (黃畫面/堆疊/原始碼) | 嚴禁生產環境,僅開發/測試 |
生產環境必須設為RemoteOnly或On,並提供友善錯誤頁面,避免洩露伺服器版本、框架版本、資料庫結構、堆疊追蹤等敏感資訊。
<pages validateRequest="true" ... />
validateRequest="true" (預設):ASP.NET 內建請求驗證,攔截包含 <script>、<iframe>、javascript: 等潛在 XSS 載荷的請求,拋出 HttpRequestValidationException。/Admin/Content/Edit)。<!-- WebForms 頁面指令 -->
<%@ Page ValidateRequest="false" %>
<!-- MVC Controller Action -->
[ValidateInput(false)]
public ActionResult Edit(ContentModel model) { ... }
⚠ 關閉驗證的頁面,務必在後端實施嚴格輸出編碼 (HtmlEncode,AntiXssEncoder) 與 內容安全策略 (CSP),絕不直接將未經過濾的輸入渲染至頁面。
若專案採用獨立 Security.config (位於 /Config) 管理後台權限:
<noCheckAdminLogOn>:免驗證後台頁面白名單 (登入頁、錯誤頁)。<noCheckUrlReferrer>:允許直接訪問 (繞過 Referer 檢查) 的後台頁面,防 CSRF 繞過。<checkSecurityCode>:關鍵操作 (刪除、發布、權限變更) 強制驗證安全碼 (Token/圖形驗證碼),防 CSRF。<checkPermissions>:頁面級操作權限碼映射,支援 RBAC 精細授權。總結:認證用 Forms + HTTPS、授權用預設拒絕匿名、錯誤用 RemoteOnly、驗證預設開啟關鍵頁關閉並加強輸出編碼,構建 ASP.NET 應用基礎安全三角鐵。