追蹤的安全性考慮和實用秘訣
本主題描述如何保護敏感性資訊免於公開,以及使用 WebHost 時的實用秘訣。
搭配 WebHost 使用自訂追蹤接聽程式
如果您要撰寫自己的追蹤接聽程式,您應該注意追蹤在 Web 裝載服務的情況下可能會遺失的可能性。 當 WebHost 回收時,它會關閉運行中的程序,並由一個副本接管。 不過,這兩個進程在一段時間內仍必須具有相同資源的存取權,這相依於接聽程序類型。 在此情況下,XmlWriterTraceListener
為第二個進程建立新的追蹤檔案;而 Windows 事件追蹤會在相同的會話內管理多個進程,並提供相同檔案的存取權。 如果您自己的監聽器未提供類似功能,檔案被兩個程序鎖定時,追蹤可能會遺失。
您也應該注意,自定義追蹤接聽程式可以通過網絡將追蹤和訊息傳送到例如遠端資料庫。 身為應用程式部署者,您應該使用適當的訪問控制來設定自定義接聽程式。 您也應該對可在遠端位置公開的任何個人資訊套用安全性控制。
記錄敏感性資訊
當訊息在處理範圍內時,追蹤會包含訊息標題。 啟用追蹤時,應用程式特定標頭中的個人資訊,例如查詢字串;和內文資訊,例如信用卡號碼,可以在記錄中顯示。 應用程式部署者負責強制執行組態和追蹤檔案的訪問控制。 如果您不希望看到這類資訊,您應該停用追蹤,或如果您想要共用追蹤記錄,請篩選掉部分數據。
下列秘訣可協助您防止不小心公開追蹤檔案的內容:
請確定記錄檔受到 WebHost 和自我裝載案例中的訪問控制清單 (ACL) 保護。
選擇無法透過 Web 請求輕鬆提供的檔案副檔名。 例如,.xml 擴展名不是安全的選擇。 您可以檢查 IIS 系統管理指南,以查看可提供服務的延伸模組清單。
指定記錄檔位置的絕對路徑,該位置應該位於 WebHost vroot 公用目錄之外,以防止外部方使用網頁瀏覽器存取它。
根據預設,金鑰和個人標識資訊(例如使用者名稱和密碼)不會記錄在追蹤和記錄的訊息中。 不過,計算機系統管理員可以使用 Machine.config 檔案 machineSettings
元素中的 enableLoggingKnownPII
屬性,允許計算機上執行的應用程式記錄已知的個人標識資訊 (PII),如下所示:
<configuration>
<system.ServiceModel>
<machineSettings enableLoggingKnownPii="Boolean"/>
</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。
您應該注意,如果您在組態檔中指定兩個或多個自定義來源,則只會讀取第一個來源的屬性。 其他專案會被忽略。 這表示,就下列 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="xml" />
</listeners>
</source>
</sources>
</system.diagnostics>
如果 <machineSettings enableLoggingKnownPii="Boolean"/>
元件存在於 Machine.config 檔案之外,系統會拋出 ConfigurationErrorsException。
只有在應用程式啟動或重新啟動時,變更才會生效。 當這兩個屬性都設定為 true
時,會在啟動時記錄事件。 如果 logKnownPii
被設定為 true
,但 enableLoggingKnownPii
是 false
,那麼也會記錄事件。
如需 PII 記錄的詳細資訊,請參閱 PII 安全性鎖定 範例。
使用這兩個交換器時,計算機管理員和應用程式部署者應該特別小心。 如果已啟用 PII 記錄,則會記錄安全性金鑰和 PII。 如果停用,敏感性和應用程式特定的資料仍會記錄在訊息標頭和內文中。 如需有關隱私權和保護 PII 免於公開的更徹底討論,請參閱 用戶隱私權。
此外,訊息傳送者的 IP 位址會在連線導向傳輸方式下,每個連線記錄一次,而在其他情況下,會針對每個訊息傳送記錄一次。 這是在未經寄件者同意的情況下完成的。 不過,此記錄只會發生在資訊或詳細資訊追蹤層級,除了即時偵錯之外,這不是生產環境中默認或建議的追蹤層級。