从clojure ring app中的日志中过滤敏感参数

时间:2016-02-25 06:28:46

标签: clojure ring

我在我的应用中使用wrap-with-logger(来自ring.middleware.logger)和wrap-params(来自ring.middleware.params)中间件。从日志中过滤敏感参数(密码,信用卡号等)的简单方法吗?

2 个答案:

答案 0 :(得分:2)

您可以实施自定义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

答案 1 :(得分:2)

您还可以考虑迁移到ring-logger,其中包含feature to redact sensitive information

  

默认情况下,ring-logger将编辑授权标头或任何名为password的参数(在任何嵌套级别)。如果您希望ring-logger编辑其他参数,您可以配置redact-keys选项:

   (wrap-with-logger app {:redact-keys #{:senha :token})
     

Ring-logger将遍历params和标头,并编辑在redact-keys集中找到其名称的任何密钥。

还有ring-logger-onelog,可以很容易地从ring.middleware.logger迁移到ring-logger