从 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。理想情况下,我们不应该记录任何敏感信息,但有时我们需要记录整个对象,其中某些道具不希望被记录,上面是处理这种情况的集中方法,而不是审查代码中的每个提交来验证这个潜在的错误。
我正在为我的应用程序使用 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。理想情况下,我们不应该记录任何敏感信息,但有时我们需要记录整个对象,其中某些道具不希望被记录,上面是处理这种情况的集中方法,而不是审查代码中的每个提交来验证这个潜在的错误。