訊息記錄的安全性考慮
本主題描述如何保護敏感數據免於在訊息記錄中公開,以及訊息記錄所產生的事件。
安全性考慮
記錄敏感性資訊
Windows Communication Foundation (WCF) 不會修改應用程式特定標頭和本文中的任何數據。 WCF 也不會追蹤應用程式特定的標頭或內文資料中的個人資訊。
啟用訊息記錄時,應用程式特定標頭中的個人資訊,例如查詢字串;和內文資訊,例如信用卡號碼,可以在記錄中顯示。 應用程式部署者負責在組態和記錄檔上強制執行訪問控制。 如果您不希望看到這類資訊,您應該停用記錄,或篩選掉部分數據,如果您想要共享記錄。
下列秘訣可協助您防止不小心公開記錄檔的內容:
確定記錄檔受到 Web 主機和自我主機案例中的訪問控制清單 (ACL) 保護。
選擇無法輕易透過網頁請求取得的檔案副檔名。 例如,.xml 擴展名不是安全的選擇。 您可以檢查 Internet Information Services (IIS) 系統管理指南,以查看可提供服務的延伸模組清單。
指定記錄檔位置的絕對路徑,該位置應該位於 Web 主機 vroot 公用目錄之外,以防止外部方使用網頁瀏覽器存取它。
根據預設,金鑰和個人標識資訊(例如使用者名稱和密碼)不會記錄在追蹤和記錄的訊息中。 不過,計算機系統管理員可以使用 Machine.config 檔案 machineSettings
元素中的 enableLoggingKnownPII
屬性,允許計算機上執行的應用程式記錄已知的個人標識資訊 (PII)。 下列組態示範如何執行這項操作:
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true"/>
</system.serviceModel>
</configuration>
然後,應用程式部署者可以使用 App.config 或 Web.config 檔案中的 logKnownPii
屬性來啟用 PII 記錄,如下所示:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
只有當這兩個設定都為 true
時,PII 記錄才會啟用。 兩個開關的組合可讓您靈活地記錄每個應用程序的已知個人識別資訊(PII)。
重要
在 .NET Framework 4.6.1 中,logEntireMessage
和 logKnownPii
旗標也必須設定為 Web.config 檔案或 App.config 檔案中的 true
,才能啟用 PII 記錄,如下列範例 <system.serviceModel><messageLogging logEntireMessage="true" logKnownPii="true" …
所示。
您應該注意,如果您在組態檔中指定兩個或多個自定義來源,則只會讀取第一個來源的屬性。 其他專案會被忽略。 這表示,就下列 App.config檔案而言,儘管特別為第二個來源啟用了 PII 記錄,但這兩個來源的 PII 均不會被記錄。
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="traces"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
如果 <machineSettings enableLoggingKnownPii="Boolean"/>
元素存在於 Machine.config 檔案之外,系統會拋出 ConfigurationErrorsException。
只有在應用程式啟動或重新啟動時,變更才會生效。 當這兩個屬性都設定為 true
時,會在啟動時記錄事件。 如果 logKnownPii
設定為 true
,但 enableLoggingKnownPii
是 false
,也會記錄事件。
使用這兩個交換器時,計算機管理員和應用程式部署者應該特別小心。 如果已啟用 PII 記錄,則會記錄安全性金鑰和 PII。 如果停用,敏感資料和應用程式專有數據仍會記錄在訊息標頭和內文中。 如需有關隱私權和保護 PII 免於公開的更完整討論,請參閱 使用者隱私權。
謹慎
PII 不會隱藏在格式不正確的訊息中。 這類訊息會被記錄下來 as-is,不進行任何修改。 先前提到的屬性對此沒有任何影響。
自訂追蹤偵聽器
在訊息記錄追蹤來源上新增自訂追蹤接聽程式是應由系統管理員限制的權限。 這是因為惡意自定義接聽程式可以設定為從遠端傳送訊息,這會導致敏感性資訊洩漏。 此外,如果您設定自定義接聽程式以在網路傳送訊息,例如傳送至遠端資料庫,您應該對遠端電腦上的訊息記錄強制執行適當的訪問控制。
訊息記錄所觸發的事件
下列列出訊息記錄發出的所有事件。
訊息記錄開啟:當在組態中或透過 WMI 啟用訊息記錄時,此事件被觸發。 事件的內容是「訊息記錄已開啟」。 機密資訊可能會以未加密的純文本被記錄,即使它們在傳輸過程中已被加密,例如,訊息內容。
訊息註銷:透過 WMI 停用訊息記錄時,就會發出此事件。 事件訊息的內容為「訊息記錄已關閉」。
記錄已知 PII 開啟:啟用已知 PII 記錄時,就會發出此事件。 當 Machine.config 檔案
machineSettings
元素中的enableLoggingKnownPii
屬性設定為true
時,App.config 或 Web.config 檔案中source
項目的logKnownPii
屬性會設定為true
。記錄已知 PII 不允許:不允許記錄已知 PII 時,就會發出此事件。 當 App.config 或 Web.config 檔案中
source
項目的logKnownPii
屬性設定為true
時,就會發生這種情況,但 Machine.config 檔案之machineSettings
專案中的enableLoggingKnownPii
屬性會設定為false
。 沒例外拋出。
這些事件可以在 Windows 隨附的事件查看器工具中檢視。 如需詳細資訊,請參閱 事件記錄。