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 階層、location 標記與 allowOverride 鎖定

編輯:關於伺服器

核心概念:分層計算與覆寫規則

ASP.NET 針對每個請求的 URL 虛擬路徑,從機器層 → 應用程式根目錄 → 子目錄 依序合併 Web.config 設定。預設規則:**子目錄設定覆寫父目錄相同區段**,但區段處理器可自訂繼承邏輯。

實例場景:差異化授權

/ (應用程式根目錄)          → 允許所有用戶存取
  /SubDir1 (含 Web.config)    → 僅允許特定角色
  /SubDir2 (無 Web.config)    → 繼承 SubDir1 設定 (因同層最近有設定)

若根目錄無 Web.config,則繼承機器層 Machine.config (預設允許所有)。

虛擬目錄 vs 實體目錄陷阱

設定繼承依賴 虛擬路徑,與實體磁碟結構無關。

實體:C:\Subdir1\Subdir2\MyResource.aspx
虛擬目錄 Vdir1 → C:\Subdir1
虛擬目錄 Vdir2 → C:\Subdir1\Subdir2
  • 請求 https://localhost/vdir1/subdir2/MyResource.aspx → 繼承 Vdir1 設定。
  • 請求 https://localhost/vdir2/MyResource.aspx → 不繼承 Vdir1 設定 (虛擬路徑不同)。
警告: 交叉映射虛擬目錄會導致不可預期的設定行為,甚至應用程式失效。嚴禁將同一實體目錄映射為多個虛擬路徑層級。

非 ASP.NET 資源不受設定系統管轄

ASP.NET 設定僅對經由 aspnet_isapi.dll 處理的資源生效 (.aspx, .asmx, .ashx 等)。
靜態檔案 (.asp, .html, .txt, .gif, .jpg) 不受 <authorization> 等區段控制,若啟用目錄瀏覽,所有用戶均可存取。需搭配 IIS 原生 NTFS 權限或 URL Authorization 模組保護靜態資源。

進階技巧:<location> 標記精準套用設定

在單一 Web.config 中針對特定子目錄/檔案套用不同設定:

<configuration>
  <system.web>
    <sessionState cookieless="true" timeout="10"/>  <!-- 全域 -->
  </system.web>

  <location path="Sub1">
    <system.web>
      <httpHandlers>
        <add verb="*" path="Sub1.Scott" type="Sub1.Scott"/>
        <add verb="*" path="Sub1.David" type="Sub1.David"/>
      </httpHandlers>
    </system.web>
  </location>

  <location path="Sub2">
    <system.web>
      <httpHandlers>
        <add verb="*" path="Sub2.Scott" type="Sub2.Scott"/>
        <add verb="*" path="Sub2.David" type="Sub2.David"/>
      </httpHandlers>
    </system.web>
  </location>
</configuration>
  • path 屬性支援相對虛擬路徑 (子目錄或檔案)。
  • 可集中管理多子目錄設定,避免散落大量 Web.config。

關鍵防禦:allowOverride="false" 鎖定關鍵設定

託管環境 (ISP、共享主機) 必須防止使用者覆寫安全性設定 (如 Trust Level)。

<configuration>
  <location path="Application1" allowOverride="false">
    <system.web>
      <trust level="High"/>  <!-- 強制 High Trust,子目錄無法降為 Full -->
    </system.web>
  </location>

  <location path="Application2" allowOverride="false">
    <system.web>
      <trust level="Medium"/>
    </system.web>
  </location>
</configuration>

若子目錄 Web.config 嘗試覆寫 <trust level="Full"/>,ASP.NET 將拋出設定錯誤 (Configuration Error),有效阻止權限提升攻擊。

結語

掌握 ASP.NET 設定繼承的三大要點 —— 虛擬路徑決策、location 精準套用、allowOverride 鎖定關鍵區段 —— 是建立安全、可維護、多租戶友善的 ASP.NET 應用程式架構基石。部署前請務必以實際虛擬路徑測試設定生效順序,避免繼承衝突導致權限洩漏。

Copyright © Windows教程網 All Rights Reserved