【问题标题】:How to redact sensitive information from log4net?如何编辑来自 log4net 的敏感信息?
【发布时间】:2013-02-12 20:35:05
【问题描述】:

我们的应用程序中的一些异常消息包含不应出现在错误日志中的凭据/私钥或其他敏感信息。我想在写入之前过滤记录的消息的内容,以便可以将已知的敏感值和/或模式替换为 [redacted] 或某些此类文本值。几次搜索都没有发现任何东西。有没有办法做到这一点并以通用方式将其应用于所有配置的附加程序?

我不想通过知道所有这些异常可能发生的位置并为此编写异常处理程序来进行过滤。我们的代码不会抛出异常,因此“不这样做”不是一种选择。

【问题讨论】:

  • 您是否考虑过编写自定义 log4net 过滤器?也许基于 StringMatchFilter?我不确定过滤器是否可以更改输出,但您至少可以使用它来过滤掉日志中的条目。
  • 我的印象是过滤器用于包含/排除整个事件,而不是过滤内容。里面也有有用的信息,我只是想把顽皮的部分删掉

标签: .net log4net


【解决方案1】:

很简单:一开始就不要把它们放在那里。

当然,您可以编写一些正则表达式和启发式算法等,并在您的日志中定期运行它们 - 所有这些都容易失败或遭到破坏。

而且没有任何理由在日志中包含密码和私钥

【讨论】:

  • 我永远不会这样做。这些不是我的应用程序的异常,它们是从第三方库中抛出的。
  • 如果是这种情况,只需在敏感点跳过整个异常的日志记录。无论您做什么,请确保敏感信息永远不会到达日志文件,而不是稍后尝试编辑它
  • 嗯,这就是目标。我宁愿在 log4net 级别做一些事情来安装过滤器,而不是试图在代码中找到所有可能发生这种情况的地方。
  • 你可以编写一个自定义过滤器,你可以配置它和所有这些 - 仍然不足以保证你的日志的安全性。仍然可以修改配置文件并获取以明文形式记录的敏感数据。尽管过滤是可能的,但这不是一个好主意
  • 我不关心配置文件的安全性。
【解决方案2】:

我希望(但还没有尝试过)您可以基于sample here 编写一个BufferingAppender,并且可以使用override protected void Append(LoggingEvent loggingEvent) 方法来更改 loggingEvent 以删除敏感信息。

【讨论】:

  • 谢谢,会调查的。我希望有一些东西可以统一应用于多个现有的附加程序,但我失去了希望。
【解决方案3】:

还有另一种选择。

由于“违规”代码是第三方库,因此您不能简单地“从异常中删除信息”是正确的。

但是,您可以创建一个外观类来使用相同的 API 调用该库,然后将错误处理/编辑添加到新类中。然后只需在整个代码中使用该类代替原始库即可。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2011-05-30
    • 2018-11-01
    • 2020-11-24
    相关资源
    最近更新 更多