【问题标题】:Filter sensitive parameters from logs in clojure ring app从 clojure ring 应用程序中的日志中过滤敏感参数
【发布时间】:2016-02-25 06:28:45
【问题描述】:

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

【问题讨论】:

    标签: clojure ring


    【解决方案1】:

    您也可以考虑迁移到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

    【讨论】:

    • 您如何使用 ring-logger 获得有用的 request-id 东西(即 %x 日志)?
    • @BobKuhar 目前仅支持 ring-logger-onelog。将其添加到 ring-logger(或至少 ring-logger-timbre)有一个未解决的问题:github.com/nberger/ring-logger/issues/7。随意插话。也欢迎 PR :)
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2022-09-28
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多