有关跟踪的安全注意事项和有用提示

本主题介绍如何保护敏感信息不被公开,以及使用 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 设置为 trueenableLoggingKnownPii 设置为 false,也会记录一个事件。

有关 PII 日志记录的详细信息,请参阅 PII 安全锁定 示例。

使用这两个开关时,计算机管理员和应用程序部署器应格外小心。 如果启用了 PII 日志记录,则会记录安全密钥和 PII。 如果禁用,则敏感数据和应用程序特定的数据仍记录在消息标头和正文中。 有关隐私和保护 PII 免受公开的更深入的讨论,请参阅 用户隐私

此外,对于面向连接的传输,每连接记录一次消息发送方的 IP 地址,而对于其他传输方式,则每条消息记录一次。 这是未经发件人同意完成的。 不过,只有在“信息”或“详细”跟踪级别才会发生此日志记录,这些级别不是生产中的默认或推荐跟踪级别(现场调试时除外)。

另请参阅