有关跟踪的安全注意事项和有用提示
本主题介绍如何保护敏感信息不被公开,以及使用 WebHost 时的有用提示。
将自定义跟踪侦听器与 WebHost 一起使用
如果您正在编写自己的跟踪侦听器,则应当注意在 Web 承载的服务中,跟踪可能会丢失。 当 WebHost 回收时,它会关闭活动进程,由一个副本进程来接替该进程。 但是,这两个进程在一段时间内仍必须有权访问同一资源,这依赖于侦听器类型。 在这种情况下,XmlWriterTraceListener
为第二个进程创建新的跟踪文件;而 Windows 事件跟踪管理同一会话中的多个进程,并授予对同一文件的访问权限。 如果您自己的侦听器无法提供类似功能,则当该文件被这两个进程锁定时,跟踪可能会丢失。
还应注意,自定义跟踪侦听器可以通过网络向远程数据库发送跟踪和消息。 作为应用程序部署者,你应该使用适当的访问控制来配置自定义侦听器。 还应对可在远程位置公开的任何个人信息应用安全控制。
记录敏感信息
当消息在范围内时,跟踪包含消息头。 启用跟踪后,特定于应用程序的标头(如查询字符串)中的个人信息;和正文信息(如信用卡号)可以在日志中可见。 应用程序部署程序负责对配置和跟踪文件强制实施访问控制。 如果不希望显示此类信息,则应禁用跟踪,或者如果想要共享跟踪日志,应筛选出部分数据。
以下提示可帮助你防止无意中公开跟踪文件的内容:
确保在 WebHost 和自承载方案中,日志文件都受到访问控制列表(ACL)的保护。
选择无法通过 Web 请求轻松处理的文件扩展名。 例如,.xml 文件扩展名不是安全的选择。 可以查看 IIS 管理指南,查看可提供服务的扩展列表。
指定日志文件位置的绝对路径,该位置应位于 WebHost vroot 公共目录之外,以防止外部方使用 Web 浏览器访问它。
默认情况下,密钥和个人身份信息(如用户名和密码)不会记录在跟踪和记录的消息中。 但是,计算机管理员可以使用 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 日志记录。 通过两个开关的组合,可以灵活记录每个应用程序的已知个人身份信息。
应注意,如果在配置文件中指定两个或多个自定义源,则只读取第一个源的属性。 而忽略其他源的属性。 这意味着,对于以下 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 地址,而对于其他传输方式,则每条消息记录一次。 这是未经发件人同意完成的。 不过,只有在“信息”或“详细”跟踪级别才会发生此日志记录,这些级别不是生产中的默认或推荐跟踪级别(现场调试时除外)。