設定 ASP.NET 網站巡覽的安全性
更新:2007 年 11 月
ASP.NET 站台巡覽提供的功能,可以讓您維護網站內所有網頁連結的集中保管。然後可以藉由包含特定 Web 伺服器控制項,在每個網頁上將連結呈現為清單或巡覽功能表。
ASP.NET 站台巡覽最常搭配巡覽控制項使用,例如 SiteMapPath、SiteMapDataSource、TreeView 和 Menu 控制項;或是以程式設計方式搭配 SiteMap and SiteMapProvider 類別使用。本主題中的資訊描述如何改進巡覽功能的安全性。
雖然下列編碼和設定最佳作法有助於改進應用程式的安全性,但使用 Microsoft Windows 和網際網路資訊服務 (IIS) 的最新安全性更新,以及 Microsoft SQL Server 或其他成員資料來源的任何安全性更新,以持續保持應用程式伺服器的更新,這一點仍然很重要。如需詳細資訊,請參閱 Windows Update 網站。
如需撰寫安全程式碼和保護應用程式之最佳作法的詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《撰寫安全的程式碼》一書,以及參閱 Microsoft 典範與實例網站所提供的指南。請參閱 Web 應用程式的基本安全性實行方式。
在此主題中
設定巡覽組態的安全性
設定網站導覽資料安全性
隱藏巡覽連結不讓特定使用者看到
網站導覽 API
設定自訂網站導覽提供者實作的安全性
錯誤訊息和事件
病毒掃描程式
設定巡覽組態的安全性
根據預設會啟用 ASP.NET 站台巡覽功能。您可以在組態檔 (Web.config) 中將 siteMap 項目的 enabled 屬性設定為 false 以停用這些功能。下列章節討論在 Web.config 檔中設定巡覽相關資料的安全性。如需巡覽組態設定和其預設值的詳細資訊,請參閱 siteMap 項目 (ASP.NET 設定結構描述)。
設定組態值安全性
如果您使用預設的 ASP.NET 網站導覽提供者,就不需要設定 Web.config 檔中包含的巡覽組態設定安全性。然而,如果您實作使用資料庫的自訂網站導覽提供者,並且將資料庫連接字串儲存在組態檔中,請遵循設定資料存取的安全性中的建議加密連接字串。
在裝載環境中,組態檔應該拒絕 siteMap 項目 (ASP.NET 設定結構描述) 項目的覆寫權限,避免某人重新設定站台以使用不同的網站導覽或網站導覽提供者。如需詳細資訊,請參閱鎖定組態設定。請參閱 裝載環境中 ASP.NET 應用程式的安全性。
URL 對應
您可以使用 Web.config 檔中的 urlMappings 項目 (ASP.NET 設定結構描述) 項目,將組態檔中的 URL 對應到易記的 URL。ASP.NET 只允許相對應用程式的語法,例如 ~/filename.aspx。也就是說,ASP.NET 不允許對應的 URL 指向應用程式以外的網頁。在裝載環境中,這可以協助保護不允許 ISP 用戶端嘗試檢視應用程式以外的網頁。
設定網站導覽資料安全性
根據預設,ASP.NET 會設定為保護具有已知副檔名 (如 .sitemap) 的檔案,使用戶端無法下載這類檔案。若要保護您的資料,請將副檔名不是 .sitemap 的自訂網站導覽資料檔案存放在 App_Data 資料夾中,並且套用適當的存取控制清單 (ACL)。例如,在 Windows 2000 或 Windows XP 上,請授與 ASP.NET 處理序帳戶唯讀存取權。在 Windows 2003 上,請授與網路服務唯讀存取權。如需詳細資訊,請參閱 ASP.NET 所需的存取控制清單 (ACL)。
ASP.NET 網站導覽只會載入網站導覽檔案 (如果該檔案已存在於應用程式的目錄結構中)。這可以協助保護裝載環境中的應用程式,不會讓其他應用程式載入它們的網站導覽資料。
ASP.NET 站台巡覽不允許存取應用程式目錄結構以外的檔案。如果網站導覽包含參考其他網站導覽檔案的節點,並且檔案位置在應用程式以外,就會發生例外狀況。例外狀況會包含 SiteMapNode 中指定的路徑,列出其位於應用程式範圍以外,但是例外狀況不會指示路徑是否正確。這可以協助保護不讓某人使用 ASP.NET 站台巡覽,探索伺服器上的有效檔案路徑。
如果您實作使用資料庫的自訂網站導覽提供者,如需協助保護網站導覽資料的資訊,請參閱 設定資料存取的安全性。
網站導覽載入程序
預設的 ASP.NET 網站導覽提供者會將網站導覽資料當做 XML 文件載入,並且在應用程式啟動時將其快取為靜態資料。非常大的網站導覽檔案會在載入時使用大量記憶體和 CPU 資源。在裝載環境中,請限制允許客戶為站台建立的網站導覽大小。這可以協助保護不受服務拒絕攻擊。
ASP.NET 站台巡覽功能是依照檔案告知而定,將巡覽資料保持在最新狀態。當網站導覽檔案變更時,ASP.NET 會重新載入網站導覽資料。如果站台巡覽結構是由子網站導覽所組成,子網站導覽的使用者已授與寫入權限,但是使用者不了解所做的每次變更都會導致重新載入,就可能會導致問題。請確定在所有網站導覽檔案上設定存取限制。請定義有權限更新那些位置檔案的使用者群組,然後在網站導覽檔案上將權限設定為個別使用者群組。
隱藏巡覽連結不讓特定使用者看到
ASP.NET 站台巡覽可以藉由角色設定個別網站導覽節點的安全性。如果您想要隱藏站台巡覽結構的一部分不讓某些使用者看見,可以啟用 ASP.NET 安全性調整。一旦啟用後,ASP.NET 會檢查 URL 授權,並且選擇性地檢查網站導覽節點中所列出檔案的檔案存取權限。只有在使用者有存取權時,ASP.NET 才會顯示檔案的連結。如果您想要允許所有使用者檢視限制檔案的連結,請將對應網站導覽節點的 roles 屬性設定為星號 (*) 或是萬用字元,就可以讓所有的用戶端檢視連結。如需詳細資訊,請參閱 ASP.NET 網站導覽安全性調整。
在網站導覽中包含外部 URL
在網站導覽中,您可以參考 ASP.NET 應用程式以外的 URL。然而,ASP.NET 無法測試存取應用程式以外的 URL。例如,如果您建立對應 https://www.microsoft.com 的網站導覽節點,並且啟用安全性調整,用戶端將看不到超連結,這是因為 ASP.NET 無法測試外部 URL 的存取權限。如果您啟用安全性調整並且有對應至外部 URL 的網站導覽節點,請將這些節點的 roles 屬性設定為星號 (*),讓所有的用戶端能夠檢視連結 (即使 ASP.NET 無法授權外部連結的存取)。
站台巡覽 API
電腦上執行的任何程式碼都可以公開使用站台巡覽類別。站台巡覽類別是在最少信任下執行。然而,使用較低的信任權限來載入網站導覽資料是必要的,因為當使用預設網站導覽提供者 XmlSiteMapProvider 開啟網站導覽檔案時,ASP.NET 需要會使用到檔案 I/O 的作業。另外,您還可以選擇是否要開發沒有這項限制的自訂網站導覽提供者。
如需詳細資訊,請參閱 ASP.NET 信任層級和原則檔和實作 ASP.NET 網站導覽提供者。
設定自訂網站導覽提供者實作的安全性
當實作自訂網站導覽提供者時,請確定已重新審查該提供者的安全性最佳作法。特別是在裝載案例中,如果並未正確實作自訂網站導覽提供者,可能會遺漏資訊或包含不安全的預設組態設定,因此這個動作就很重要。請遵循最佳作法以協助避免受到像是 SQL 插入的攻擊。例如,您應該永遠驗證參數輸入。
如需設定資料庫安全性的資訊,請參閱設定資料存取的安全性。請參閱 裝載環境中 ASP.NET 應用程式的安全性。
錯誤訊息和事件
下列章節討論如何減輕未預期的錯誤訊息和事件所公開的潛在安全性風險。
例外狀況訊息
ASP.NET 站台巡覽功能擲回的例外狀況,並不會公開有權限的資訊。重新審查和測試 Web 應用程式中自訂類別的無效輸入和要求,有助於確保在發生例外狀況時,不會公開有權限的資訊。
錯誤訊息
若要協助避免對不必要的來源公開敏感資訊,請開啟應用程式的自訂錯誤,或是只有在用戶端是 Web 伺服器本身時才顯示詳細錯誤訊息。如需詳細資訊,請參閱 customErrors 項目 (ASP.NET 設定結構描述)。
事件記錄檔
如果電腦執行 Windows Server 2003,您可以藉由設定事件記錄檔的安全性,改進應用程式的安全性。此外,設定關於事件記錄檔的大小、保留功能等參數,可以協助避免記錄檔受到間接服務拒絕攻擊。根據預設,只有 Administrators 安全性群組的成員能夠檢視事件記錄檔。如需設定事件記錄檔的詳細資訊,請在「Windows 說明及支援」中搜尋「事件檢視器」。
病毒掃描程式
您不應該設定像是病毒掃描程式的工具來修改網站導覽檔案。這會導致不必要地重新載入巡覽資料,因為 ASP.NET 站台巡覽功能是依照檔案告知而定,將巡覽資料保持在最新狀態。