使用Sinatra和Rack Logger记录时如何过滤敏感信息?

问题描述 投票:4回答:2

我维护了一个作为JSON API服务的Sinatra应用。该API被另一个web应用以及一个移动应用所消耗。

我想让 Rack::CommonLogger 从日志中排除敏感信息,比如密码。Rails有启用这个设置,但我没有发现任何文档说明如何在Sinatra中做到这一点。

ruby logging sinatra rack
2个回答
5
投票

你可以尝试拦截调用写,过滤掉敏感信息,比如......。

logger = Logger.new("my_common.log")
logger.instance_eval do
  def write(msg)
    self.send(:<<, msg) if !msg.match /SUPER SENSITIVE INFO HERE/
  end
end

然后,配置Rack::CommonLogger来使用这个记录器的实例。

config.middleware.use Rack::CommonLogger, logger

0
投票

Sinatra将日志记录到STDERR,这是一个IOm,但我们不想存储其他人的密码。

module NoTokenLogging
  def write(*args)
    args.first.sub!(/password=\S+/, "password=[FILTERED]")
    super
  end
end
IO.prepend NoTokenLogging

0
投票

你也可以利用 ActiveSupport::ParameterFilter.

https:/edgeapi.rubyonrails.orgclassesActiveSupportParameterFilter.html。

© www.soinside.com 2019 - 2024. All rights reserved.