使用ServiceStack.Text序列化为日志文件时编辑敏感信息

时间:2018-04-10 15:39:35

标签: servicestack nlog servicestack-text redaction

我正在使用ServiceStack.TextServiceStack.Logging.NLog来记录从.NET客户端应用程序发送到Web服务或从Web服务发送的DTO请求。虽然机器通常是安全的,但我想编辑可能存储在纯文本中的敏感信息(想想姓名,地址,基本身份证明等)。

我查看了各种JsConfig<T>方法,但似乎我必须为每个DTO实现SerializeFn<T>。 “遗失一个”存在风险,我只想将其应用于日志记录范围。

我查看了NLog个过滤器,when只是更改了是否记录了邮件。

在使用ServiceStack.Logging \ NLog记录DTO时,是否有一些通用方法可以使用编校标记替换敏感属性/键/属性?

1 个答案:

答案 0 :(得分:0)

没有用于更改应序列化字段的作用域序列化程序选项。

我正在考虑的可能解决方案是维护DTO类型的白名单,其中包含不应记录的敏感信息或使用反射来设置您不希望null的属性。

ServiceStack具有converting Types in an object dictionary的API和Dictionaries中的rehydrate类型,因此您可以执行以下操作:

var map = requestDto.ToObjectDictionary();
ProtectedNames.ForEach(x => map.Remove(x));

然后,您可以序列化map中的其余属性,或者将其转换回请求DTO,而不删除已删除的属性:

var safeDto = map.FromObjectDictionary(requestDto.GetType());