【问题标题】:Removing sensitive information from logs in ASP.NET Core logging从 ASP.NET Core 日志记录中删除敏感信息
【发布时间】:2018-02-12 18:58:23
【问题描述】:

我正在为我的应用程序使用 ASP.NET Core 日志记录抽象。

我有一个敏感字符串列表,我想确保在发送到任何接收器时在日志中屏蔽“*****”。 (我正在使用 serilog - 但也许它甚至可以在 serilog 之前插入)。

在发送到任何接收器/写入器等之前,我如何将其插入 ASP.NET Core 日志记录系统以用“*******”替换所有这些敏感字符串。

【问题讨论】:

    标签: .net .net-core .net-core-logging


    【解决方案1】:

    在不知道您要擦洗什么的情况下,有几个选项。

    this GitHub issue 有几个好主意。

    总结一下主线: 您可以使用丰富器来完全擦除属性的内容。您还可以使用文本格式化程序手动运行正则表达式替换。

    还提到了一些包,您可以添加它们以提供更多关于处理日志的结构:

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,我需要在日志记录期间编辑/隐藏对象的某些字段。

      为简洁起见,我们假设对象是

      public class User
      {
         public string UserName { get; set; }
         public string Password { get; set; }
         public override string ToString()
         {  
             return base.ToString();
         }
      }
      

      现在我们使用对象解构运算符(@)使用 serilog 进行日志记录

      User user = new User() { UserName = "u", Password = "p" };
      _logger.LogWarning("value is {@val}", user);
      

      为了隐藏 Password 属性,我们可以如下设置 serilog

      Log.Logger = new LoggerConfiguration()
                              .WriteTo.Console(new Serilog.Formatting.Json.JsonFormatter())
                              .Destructure.ByTransforming<User>(_ => new { User = _.UserName })
                              .CreateLogger();
      

      现在对于任何对象的日志记录,用户都不会在其中包含密码字段,或者您可以通过设置 Password = "######" 来编辑密码字段

      附:理想情况下,我们不应该记录任何敏感信息,但有时我们需要记录整个对象,其中某些道具不希望被记录,以上是处理这种情况的集中方法,而不是审查代码中的每个提交来验证这个潜在的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-01
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 2016-11-02
        相关资源
        最近更新 更多