Я запускаю Rails 3 и пытаюсь отфильтровать конфиденциальную информацию из наших журналов, которые представляют собой капли JSON, которые передаются как параметры сообщения. Например, Создание пользователя может принимать параметр сообщения с именем user
со строковым значением, которое является объектом JSON. Один из ключей в объекте JSON - пароль
, и мы хотим отфильтровать его из наших журналов. Лучшим способом, который я нашел для этого, было добавление блока к нашим параметрам filter_params, например так:
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":"", or "key":""}, allowing for whitespace
v.sub!(/("\s*#{key}\s*")\s*:\s*"[^,\}]*"\s*([,\}])/, "\\1:\"[FILTERED]\"\\2")
end
end
end
Это добавляет блок в filter_params, что вызывает ошибку, описанную в другом вопросе: Rails: ParameterFilter :: compiled_filter пытается дублировать символ
Похоже, что передавать блок в filter_parameters небезопасно, поэтому мне интересно, есть ли другой способ решить эту проблему.