保護設定檔屬性
更新:2007 年 11 月
您可以使用 ASP.NET 設定檔功能儲存和擷取資料來源 (例如資料庫) 中的使用者設定。您可以在應用程式的組態檔中,指定組成使用者設定檔的屬性和群組。在執行階段 ASP.NET 會使用組態資訊,以動態方式為每個設定檔屬性產生使用強型別存組子的類別。然後使用靜態 Profile 屬性公開這個類別。設定檔提供者會將設定檔屬性值,以純文字 XML 或序列化二進位表單形式儲存在資料來源中。
您可以遵循程式設計和組態的最佳做法,改進應用程式的安全性。使用最新的 Microsoft Windows 和 Microsoft Internet Information Services (IIS) 安全性更新,以及 Microsoft SQL Server 或其他設定檔資料來源的任何更新,將應用程式 Web 伺服器隨時保持在最新狀態是很重要的。
如需撰寫安全程式碼以及設定應用程式安全性的最佳做法詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《撰寫安全的程式碼》,以及遵循「Microsoft 典範與實例」提供的建議 (https://www.microsoft.com/taiwan/resources/practices/default.mspx)。
保護設定檔組態
根據預設會啟用 ASP.NET 的設定檔功能。雖然預設組態會設定為最安全的值,但是如果應用程式不需要使用的話,仍然建議您停用使用者設定檔功能。如需設定檔組態設定和其預設值的詳細資訊,請參閱 profile 項目 (ASP.NET 設定結構描述)。根據預設會停用設定檔屬性能夠設定的匿名識別。如需匿名識別組態設定和其預設值的詳細資訊,請參閱 anonymousIdentification 項目 (ASP.NET 設定結構描述)。
保護組態值
當您在組態檔中儲存敏感資訊時,建議您使用受保護的組態加密敏感值。資訊 (特別是敏感的資訊) 包含了儲存在 machineKey 組態項目中的加密金鑰,以及儲存在 connectionStrings 組態項目中的資料來源連接字串。如需詳細資訊,請參閱使用受保護的組態加密組態資訊。
保護設定檔資料來源連接
連接字串
要注意的是,保護儲存在連接字串中的敏感資訊是很重要的,這個字串是用來與執行 SQL Server 或其他資料來源的電腦進行通訊。若要保護資料庫連線的安全性,建議您使用受保護的組態加密組態中的連接字串資訊。如需詳細資訊,請參閱使用受保護的組態加密組態資訊。
使用整合式安全性連接 SQL Server
建議您使用整合式安全性連接執行 SQL Server 的電腦,以避免洩漏連接字串導致公開任何使用者 ID 和密碼資訊。當您指定使用整合式安全性連接以連接到執行 SQL Server 的電腦時,設定檔提供者會還原成處理序的識別。建議您確認執行 ASP.NET (例如,應用程式集區) 的處理序識別,是預設處理序帳戶或受限的使用者帳戶。如需詳細資訊,請參閱 ASP.NET 模擬。
SQL Server 資料庫使用權限
預設用來儲存設定檔資訊,包括資料庫角色和檢視的 SQL Server 資料庫,可以讓您限制使用者只能存取應用程式所需要的權限。建議您指派最小的必要權限給連接 SQL Server 設定檔資料庫的使用者 ID。如需詳細資訊,請參閱 SQL Server 應用程式服務資料庫中的角色和檢視。
保護設定檔資料來源中的敏感資料
預設使用者設定檔提供者不會加密儲存在設定檔資料來源中的值。建議您在將任何敏感資訊儲存至設定檔資料來源之前先行加密,以避免在資料來源受到危害時公開敏感資訊。您可以在儲存設定檔屬性值之前加密敏感資料,或是可以擴充 ProfileBase 或 ProfileProvider 類別以提供加密功能。
避免在應用程式間共用匿名設定檔資料
如果應用程式和所使用的設定檔屬性已啟用匿名識別,匿名設定檔屬性值就有公開至其他應用程式的風險。當匿名識別 cookiePath 屬性設定為包含多個應用程式的路徑,並且當通用網域中存在多個應用程式時,就會發生這種情況。
當您搭配使用者設定檔使用匿名識別,並且想要在應用程式之間區隔匿名使用者時,建議您在每個應用程式的 machineKey 項目中指定不同的加密金鑰、將匿名識別 Cookie 的範圍設定為特定應用程式,然後將每個應用程式的 ApplicationName 屬性設定為不同的值。
保護使用設定檔的 Web 網頁
使用儲存在設定檔屬性之敏感資料的應用程式頁,應該使用標準的 Web 安全性機制進行保護。其中包含使用 Secure Sockets Layer (SSL),並且要求使用者要登入才能執行像是更新使用者資訊,或刪除使用者的敏感作業。此外,避免在 Cookie 中儲存敏感資料。
保護不受拒絕服務攻擊
如果大量的用戶端同時呼叫會執行更新,或是長時間執行搜尋作業的 ProfileManager 類別方法,就會降低設定檔資料來源的回應程度。若要降低應用程式受到拒絕服務攻擊的風險,只允許系統管理使用者存取執行資料庫更新,或是與設定檔關聯之搜尋的 ASP.NET Web 網頁。
錯誤訊息和事件
例外狀況
若要避免公開敏感資訊,請設定應用程式為不顯示詳細的錯誤訊息,或是只有在本機 Web 伺服器上執行應用程式時才顯示詳細錯誤訊息。如需詳細資訊,請參閱 customErrors 組態項目。
事件記錄檔
ASP.NET 設定檔功能會使用 ASP.NET 健康監視記錄某些錯誤狀況的資訊,預設會將資訊儲存在事件記錄檔中。如果您的伺服器電腦執行的是 Windows Server 2003,可以藉由保護事件記錄檔和設定與事件記錄檔的大小、保留期間等相關參數,避免間接的拒絕服務攻擊以改進應用程式安全性。
追蹤資訊
Web 伺服器可以設定為,當發生某些關於設定檔功能的動作時進行追蹤,然後將追蹤資訊存放在記錄檔中。因為像是使用者名稱的敏感資訊會儲存在追蹤記錄檔中,建議您只允許系統管理員啟用追蹤、設定追蹤記錄檔的位置,以及存取追蹤記錄檔。
自訂設定檔提供者
當建立資料庫存取的自訂設定檔提供者時,請確認已遵循安全性最佳做法以避免像是 SQL 插入的攻擊。當使用自訂設定檔提供者時,請確認已重新審查該提供者的安全性最佳做法。