【发布时间】:2016-02-25 06:28:45
【问题描述】:
我在我的应用程序中使用wrap-with-logger(来自ring.middleware.logger)和wrap-params(来自ring.middleware.params)中间件。有什么简单的方法可以从日志中过滤敏感参数(密码、信用卡号等)吗?
【问题讨论】:
我在我的应用程序中使用wrap-with-logger(来自ring.middleware.logger)和wrap-params(来自ring.middleware.params)中间件。有什么简单的方法可以从日志中过滤敏感参数(密码、信用卡号等)吗?
【问题讨论】:
您也可以考虑迁移到ring-logger,其中包括feature to redact sensitive information:
默认情况下,ring-logger 将编辑授权标头或任何名为
password的参数(在任何嵌套级别)。如果您希望 ring-logger 编辑其他参数,您可以配置redact-keys选项:(wrap-with-logger app {:redact-keys #{:senha :token})Ring-logger 将遍历参数和标题,并编辑在该
redact-keys集中找到名称的任何键。
还有 ring-logger-onelog 应该可以很容易地从 ring.middleware.logger 迁移到 ring-logger
【讨论】:
您可以实现自定义pre-logger,根据您的需要过滤请求。
请参阅以下内容:
(use 'ring.adapter.jetty)
(require '[ring.middleware.logger :as logger])
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/html"}
:body "Hello World"})
(run-jetty
(logger/wrap-with-logger
handler
:pre-logger
(fn [options req]
;; Filtering goes here
(let [filtered-req (filter-sensitive-data req)]
((:info options) "Filtered requrest is: " filtered-req))))
{:port 8080})
请注意,虽然文档 claims pre-logger 只接受一个参数 truly it is two-arg function。
【讨论】: