如何在日志记录中过滤部分路径(不是参数)?
How to filter parts of your path (not parameters) on logging?
在我的路线中,我有一条类似于 GET 'check/:secret
的路线。
当我向日志中的该路由发送请求时,我看到:
Started GET "/check/the-secret-here" for ::1 at 2021-01-14 16:38:01 -0600
...
我想filter/redact这个秘密看起来像:
Started GET "/check/[FILTERED]" for ::1 at 2021-01-14 16:38:01 -0600
...
我正在使用 Rails 5.1,我添加了 config.filter_parameters += %i[secret]
,它确实过滤了值,但仅在 POST 参数上。
您描述的不是参数,而是 url 的一部分。
如果您将您的秘密作为可以在任何地方共享的 url 的一部分公开,那么可能不会像您期望的那样如此秘密,所以也许是将该操作更改为 POST 请求是个好主意吗?
无论如何,如果有任何充分的理由保持这种方式,我唯一能看到的就是猴子修补你的 rails 实例,特别是 ActionDispatch::Http::FilterParameters
。因此,在您的 config/initializers
文件夹中添加:
module ActionDispatch
module Http
module FilterParameters
def filtered_path
# Keep an eye here adding a really good filtering regex, or potentially
# you'll filter more than you were expecting
secret_path = path.gsub(/\/the-secret-here\//, "\/[FILTERED]\/")
@filtered_path ||= query_string.empty? ? secret_path : "#{secret_path}?#{filtered_query_string}"
end
end
end
end
在我的路线中,我有一条类似于 GET 'check/:secret
的路线。
当我向日志中的该路由发送请求时,我看到:
Started GET "/check/the-secret-here" for ::1 at 2021-01-14 16:38:01 -0600
...
我想filter/redact这个秘密看起来像:
Started GET "/check/[FILTERED]" for ::1 at 2021-01-14 16:38:01 -0600
...
我正在使用 Rails 5.1,我添加了 config.filter_parameters += %i[secret]
,它确实过滤了值,但仅在 POST 参数上。
您描述的不是参数,而是 url 的一部分。
如果您将您的秘密作为可以在任何地方共享的 url 的一部分公开,那么可能不会像您期望的那样如此秘密,所以也许是将该操作更改为 POST 请求是个好主意吗?
无论如何,如果有任何充分的理由保持这种方式,我唯一能看到的就是猴子修补你的 rails 实例,特别是 ActionDispatch::Http::FilterParameters
。因此,在您的 config/initializers
文件夹中添加:
module ActionDispatch
module Http
module FilterParameters
def filtered_path
# Keep an eye here adding a really good filtering regex, or potentially
# you'll filter more than you were expecting
secret_path = path.gsub(/\/the-secret-here\//, "\/[FILTERED]\/")
@filtered_path ||= query_string.empty? ? secret_path : "#{secret_path}?#{filtered_query_string}"
end
end
end
end