Rails: filtre dados confidenciais no parâmetro JSON dos logs
Estou executando o Rails 3 e tentando filtrar informações confidenciais de nossos logs, que são blobs JSON passados como parâmetros de postagem. Por exemplo, a criação do usuário pode usar um parâmetro pós chamadouser
com um valor de sequência que é um objeto JSON. Uma das chaves no objeto JSON épassword
e queremos filtrar isso de nossos logs. A melhor maneira de fazer isso foi adicionar um bloco aos nossos filter_params, assim:
keys_to_filter = ['password', 'password_confirmation']
config.filter_parameters << lambda do |k,v|
if v.is_a? String
keys_to_filter.each do |key|
# Match "key":"<filter_out>", or "key":"<filter_out>"}, allowing for whitespace
v.sub!(/("\s*#{key}\s*")\s*:\s*"[^,\}]*"\s*([,\}])/, "\\1:\"[FILTERED]\"\\2")
end
end
end
Isso adiciona um bloco ao filter_params, que causa um erro descrito em outra pergunta:Rails: ParameterFilter :: compiled_filter tenta duplicar o símbolo
Parece que não é seguro passar um bloco para filter_parameters, então estou me perguntando se existe outra maneira de resolver esse problem