从 ASP.NET 核心日志中的日志中删除敏感信息

Removing sensitive information from logs in ASP.NET Core logging

我正在为我的应用程序使用 ASP.NET 核心日志抽象。

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

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

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

this GitHub issue中有几个好点子。

总结话题: 您可以使用 enricher 来完全擦除 属性 的内容。您还可以使用文本格式化程序手动 运行 正则表达式替换。

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

我遇到了类似的问题,我需要在记录期间 redact/hide 来自对象的某些字段。

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

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();

现在,对于对象用户的任何日志记录,其中将没有密码字段,或者您可以通过设置密码 = "######"

来编辑密码字段

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