Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

ASP.NET Web.config 安全配置核心節點深度解析:認證、授權、錯誤處理與請求驗證

編輯:關於伺服器

web.config 是 ASP.NET 應用程式安全防線的中樞。本文聚焦四大核心安全節點:<authentication>、<authorization>、<customErrors>、<pages>,提供生產環境就緒的配置範本與原理解析。

1. <authentication>:身份驗證模式與 Forms 認證細節

<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 加密與簽名防篡改。

2. <authorization>:URL 授權規則與規則評估順序

<authorization>
  <!-- 允許所有已驗證使用者 -->
  <allow users="?" />       <!-- ? = 匿名使用者 -->
  <deny users="*" />        <!-- * = 所有使用者 (含已驗證) -->
  <!-- 實際生產常見模式:預設拒絕匿名,特定頁面放行 -->
  <deny users="?" />        <!-- 封鎖匿名 -->
  <allow users="*" />       <!-- 允許已驗證 -->
  <!-- 特定角色/使用者精細控制 -->
  <allow roles="Admin,Editor" />
  <deny users="*" />
</authorization>

規則評估邏輯 (極重要)

  1. 從當前目錄 web.config 向上遞歸至根目錄 machine.config。
  2. 每層按配置順序 (先寫先評估) 匹配 <allow>/<deny>。
  3. 首個匹配規則決定結果,後續規則忽略。
  4. 預設規則 (機器層) 為 <allow users="*" /> (全開)。
最佳實踐:根目錄預設拒絕匿名 (<deny users="?" />),子目錄 (登入頁、靜態資源) 覆蓋允許匿名 (<allow users="?" />)。

3. <customErrors>:自定義錯誤頁面與資訊洩露防護

<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,並提供友善錯誤頁面,避免洩露伺服器版本、框架版本、資料庫結構、堆疊追蹤等敏感資訊。

4. <pages>:請求驗證與 XSS 防護

<pages validateRequest="true" ... />
  • validateRequest="true" (預設):ASP.NET 內建請求驗證,攔截包含 <script>、<iframe>、javascript: 等潛在 XSS 載荷的請求,拋出 HttpRequestValidationException。
  • 極少數需關閉場景:富文本編輯器 (CKEditor, TinyMCE) 提交 HTML 內容的特定頁面 (如 /Admin/Content/Edit)。

單頁關閉驗證 (MVC / WebForms)

<!-- WebForms 頁面指令 -->
<%@ Page ValidateRequest="false" %>

<!-- MVC Controller Action -->
[ValidateInput(false)]
public ActionResult Edit(ContentModel model) { ... }
⚠ 關閉驗證的頁面,務必在後端實施嚴格輸出編碼 (HtmlEncode, AntiXssEncoder) 與 內容安全策略 (CSP),絕不直接將未經過濾的輸入渲染至頁面。

進階:Security.config 企業級權限模型 (補充)

若專案採用獨立 Security.config (位於 /Config) 管理後台權限:

  • <noCheckAdminLogOn>:免驗證後台頁面白名單 (登入頁、錯誤頁)。
  • <noCheckUrlReferrer>:允許直接訪問 (繞過 Referer 檢查) 的後台頁面,防 CSRF 繞過。
  • <checkSecurityCode>:關鍵操作 (刪除、發布、權限變更) 強制驗證安全碼 (Token/圖形驗證碼),防 CSRF。
  • <checkPermissions>:頁面級操作權限碼映射,支援 RBAC 精細授權。
總結:認證用 Forms + HTTPS、授權用預設拒絕匿名、錯誤用 RemoteOnly、驗證預設開啟關鍵頁關閉並加強輸出編碼,構建 ASP.NET 應用基礎安全三角鐵。
Copyright © Windows教程網 All Rights Reserved