今天在 IIS 看到這幕楞了一下。我知道 web.config 有所謂繼承關係,但 Default Web Site 已是最上層,X-Frame-Options、X-Powered-By 是從哪裡繼承呢?

莫非是 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config?檢查它未包含這類瑣碎設定。後來熊熊想到,IIS 伺服器層級本來就有自己的設定(我又犯傻了),其中便包含 HTTP Response Header:

這就是 Default Web Site 繼承的來源:

除了 IIS 伺服器層級的 ASP.NET 及 IIS 設定,其他如 IIS 有哪些站台、AppPool、虛擬目錄、Web Application,都儲存在一個常被我遺忘的設定檔 - ApplicationHost.config

另外,各站台、Web Application 與安全相關的設定例如:驗證方式、路徑存取權限、IP 限制等等,基於安全考量不會放在自己的 web.config,而是統一儲存於 applicationHost.confg。延伸閱讀:IIS 與 web.config 的 Windows 驗證設定

IIS 的 applicationHost.confg 位於 C:\Windows\System32\inetsrv\config\applicationHost.config,需管理權限才能存取。大部分設定可透過 IIS 管理員或 PowerShell 管理,需要直接修改檔案的機會不多,我多半把它當成 Hacking 解法的捷徑。

以下是一些我曾查詢或應用的設定:

  • system.applicationHost/applicationPools
    AppPool 設定
  • sites/site/application/virtualDirectory
    站台、WebApplication、處擬目錄對映實體位置
  • staticContent/mimeType
    各副檔名對映的 MIME Type
  • httpErrors/error
    HTTP 狀態 4XX/5XX 對應的錯誤頁面
  • 各站台/WebApplication 的認證模式、限制存取 IP 來源(以 location path="..." 區分設定範圍 )
        <location path="Default Web Site/WebAppName">
          <system.webServer>
              <security>
                  <authentication>
                      <windowsAuthentication enabled="true" />
                      <anonymousAuthentication enabled="false" />
                  </authentication>
                  <ipSecurity allowUnlisted="false">
                      <add ipAddress="127.0.0.1" allowed="true" />
                      <add ipAddress="::1" allowed="true" />
                  </ipSecurity>                
              </security>
          </system.webServer>
      </location>
    

IIS Express 也有自己的 applicationHost.confg,相比之下較常用到。由於 IIS Express 不像 IIS 有完整管理介面,遇到無法啟動或刁鑽的故障,有時修改 C:\Users\userName\Documents\IISExpress\config\applicationHost.config 可以很快解決,若不知這個訣竅,就只能乖乖移除重裝,高下立判,呵。

Simple introduction to IIS/IIS Express applicationHost.config file.


Comments

# by Huang

FTP站台的目錄權限也是繼承,但如果忘了這點就踩雷了,馬上壞掉XD

# by Ellis

感謝分享~

Post a comment