共用方式為


保護瀏覽器定義檔

更新:2007 年 11 月

瀏覽器定義檔 (.browser 檔) 包含瀏覽器 (例如,Internet Explorer) 和特定瀏覽器 (例如,Internet Explorer 6.0) 之類別 (Class) 能力的相關資訊。在執行階段,ASP.NET 會使用 .browser 檔中的資訊,決定發出要求的瀏覽器、瀏覽器所具備的能力和向該瀏覽器呈現標記的方式。如需詳細資訊,請參閱瀏覽器定義檔結構描述 (browsers 項目)

如需撰寫安全程式碼和保護應用程式之最佳作法的詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《Writing Secure Code》一書,以及參閱 Microsoft Patterns and Practices 所提供的指南。

注意事項:

瀏覽器定義檔是 .NET Framework 2.0 版的新功能。在 .NET Framework 的先前版本中,使用 browserCaps 項目在組態檔中定義瀏覽器定義。

瀏覽器定義檔安全性

所有的瀏覽器能力功能,包括 .NET Framework 類別和瀏覽器定義檔,都需要在應用程式層級的部分信任,並需要在全域層級的完全信任。全域瀏覽器定義組件 (Assembly) 在置於全域組件快取之前,會使用唯一電腦金鑰簽署,且無法對其進行任何修改。%SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的瀏覽器定義檔案受存取控制清單 (ACL) 保護,需要系統管理員權限才能修改。

瀏覽器定義檔目錄

全域瀏覽器目錄和應用程式層級 App_Browsers 子目錄應只包含副檔名為 .browser 的檔案。ASP.NET 瀏覽器能力功能只編譯 .browser 檔。此外,ASP.NET 會防止 Web 伺服器提供這些目錄中的檔案,並防止其他應用程式中的程式碼存取它們。

瀏覽器定義檔 ACL

下表列出預設在 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的 .browser 檔案上設定的 ACL。這些 ACL 也會設定在目錄本身,但是其中包含 CREATOR OWNER 群組的修改權限。目錄是唯讀的。

Windows 帳戶

使用權限

系統管理員

完全控制

ASP.NET 電腦帳戶 (<server>\ASPNET)

讀取和執行

CREATOR OWNER

完全控制

IIS_WPG (<server>\IIS_WPG)

讀取和執行

LOCAL SERVICE

讀取和執行

NETWORK SERVICE

讀取和執行

進階使用者 (<server>\Power Users)

修改

SYSTEM

完全控制

使用者 (<server>\Users)

讀取和執行

下表列出應設定在 App_Browsers 子目錄中之應用程式層級 .browser 檔上的 ACL。

Windows 帳戶

使用權限

系統管理員

完全控制

IIS_WPG (<server>\IIS_WPG)

讀取和執行

INTERACTIVE

Read

Internet Guest 帳戶 (<server>\IUSR_<server>)

Read

NETWORK

Read

NETWORK SERVICE

Read

SYSTEM

完全控制

使用者 (<server>\Users)

讀取和執行

ASP.NET 網站管理工具 帳戶

特殊

加入瀏覽器定義檔

不要下載或安裝瀏覽器定義檔,除非您信任其來源。例如,檢查新的瀏覽器定義檔以查看在下列任何屬性 (Attribute) 中是否參考了不熟悉的命名空間:

  • controlAdapters 項目的 markupTextWriterType 屬性。

  • capability 項目的 value 屬性。

  • adapter 項目的 controlType 和 adapterType 屬性。

如需有效項目和屬性的詳細資訊,請參閱瀏覽器定義檔結構描述 (browsers 項目)

變更瀏覽器定義檔

如果您將新的瀏覽器定義檔案加入至全域目錄,或變更全域瀏覽器定義檔案,則必須使用 %SystemRoot%\Microsoft.NET\Framework\version 資料夾中的 Aspnet_regbrowsers.exe 工具手動重新編譯瀏覽器能力集合,或使用 BrowserCapabilitiesCodeGenerator 類別以程式設計的方式重新編譯,這些變更才會生效。

然而,您無需重新編譯應用程式層級瀏覽器定義的變更。這些定義的變更會動態地重新編譯並重新套用。

在共用裝載環境中保護瀏覽器定義檔

在共用裝載環境中,惡意使用者可能會透過直接修改瀏覽器定義檔、經由組態 API 修改,和透過其他管理和組態工具修改瀏覽器定義檔。若要減輕這個威脅,請在瀏覽器定義檔上保持強式 ACL。瀏覽器定義檔目錄的內容已經過編譯,因此應使用與應用程式中的任何其他程式碼目錄一樣的方法保護它們。如果主機系統管理員阻止使用者將程式碼加入應用程式,則也應阻止該使用者加入瀏覽器定義檔。

對瀏覽器定義檔進行檔案鎖定

只有在多次嘗試儲存瀏覽器定義檔或開啟檔案處理時,才會鎖定瀏覽器定義檔。惡意使用者可能會嘗試鎖定 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的瀏覽器定義檔案。然而,鎖定瀏覽器定義檔需要完全信任,其在 ASP.NET 中預設為停用。

使用組態 API 讀取任意檔案

瀏覽器定義組態 API 的類別無法讀取不屬於應用程式定義域的任何目錄,也無法讀取副檔名不是 .browser 的任何檔案。

快取瀏覽器能力

在執行階段,瀏覽器定義檔資訊已合併至 BrowserCapabilitiesFactory 物件中的已知瀏覽器集合。發出要求時,ASP.NET 會根據要求標頭識別要求瀏覽器,並編譯對應至要求瀏覽器的 HttpCapabilitiesBase 物件。該物件已快取,且可能要再次使用以滿足同一瀏覽器發出的不同要求。

惡意用戶端可能會嘗試讓要求大量湧入 Web 伺服器,其中每個新要求都會使用不同的要求標頭,這樣會讓 ASP.NET 產生並快取每個要求的瀏覽器能力物件,進而會引起拒絕服務攻擊。若要減輕這個威脅,請在 Machine.config 檔或 Web.config 檔中設定 browserCaps 項目 (ASP.NET 設定結構描述) 項目的 userAgentCacheKeyLength 屬性。這個項目會定義要做為鍵值的字元長度,以識別在內部快取中的快取能力物件。預設值為 64。您可減小這個值以讓相符的瀏覽器更有可能在快取中找到,進而減輕快取的負載。

例外狀況

若要避免敏感資訊公開 (Expose) 給不適當的來源,請設定應用程式為不顯示詳細的錯誤訊息,或只在用戶端就是 Web 伺服器本身時才顯示詳細錯誤訊息。如需詳細資訊,請參閱 customErrors 項目 (ASP.NET 設定結構描述)

事件記錄檔

如果伺服器執行的是 Windows Server 2003,您可以藉由保護事件記錄檔以及設定與事件記錄檔之大小、保留期間和其他功能相關的參數,防止間接的拒絕服務攻擊,以改進應用程式的安全性。如需設定事件記錄檔的詳細資訊,請在「Windows 說明及支援」中搜尋「事件檢視器」。

請參閱

工作

HOW TO:在 ASP.NET Web 網頁中偵測瀏覽器類型

概念

ASP.NET Web 伺服器控制項和瀏覽器能力

保護瀏覽器定義檔

ASP.NET 組態案例

ASP.NET 裝置篩選概觀

適應性控制項行為的架構性概觀

ASP.NET Mobile Web 開發概觀

保護 ASP.NET 組態

參考

瀏覽器定義檔結構描述 (browsers 項目)

其他資源

保護 ASP.NET 網站