- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这是 clojure/tools.logging
中的一个错误。我有以下 db.clj 文件。它做什么并不重要。重要的是,为了安全起见,我禁用了*read-eval*
。我调用 db/start 没有任何问题。但是,如果我取消注释 #_(log/info "Failed to bootstrap")
表单,则会引发 EvalReader not allowed
错误。我已经尝试了 log/info
调用的各种组合。如果它位于 try
block 之外,那就没问题。在 try
block 内的任何位置,无论是在正文、catch
还是 finally
中,都会引发此异常。但是,当我在其他地方用 try
包裹 log/info
时,就没有问题了。
什么给出了?
(ns extenium.db
(:require [clojure.tools.logging :as log]
[clojure.java.io :as io])
(:import com.thinkaurelius.titan.core.TitanGraph
com.thinkaurelius.titan.core.TitanFactory))
(def ^:private
sentinel- (Object.))
(def ^:private
db- (atom nil))
...
(defn start [^String path]
(locking sentinel-
(log/info "Starting database at path" path)
(let [exists (.exists (io/file path))
^TitanGraph db_ (TitanFactory/open path)]
(if exists
(log/info "Path" path "exists")
(log/info "Path" path "does not exist"))
(log/info "Starting database engine")
(swap! db- (constantly db_))
(log/info "Started database engine")
(if (not exists)
(try
(bootstrap-)
(catch Throwable t
#_(log/info "Failed to bootstrap")
(stop)
(.delete (io/file path))
(throw t)))))
(log/info "Started database")
true))
编辑:根据@alex-taggart 修剪代码。 bootstrap- 实现未显示。我最初包含了所有内容,因为这似乎是一个特定于上下文的错误,我觉得提供尽可能多的上下文更安全。
编辑:根据@chouser,添加了我如何禁用*read-eval*
。这是由 lein new app
生成的模板。
(defn -main
"The main entry point into Extenium."
[& args]
;; Prevent arbitrary eval injection
(alter-var-root #'*read-eval* (constantly false))
;; Initialize system settings from the command line and configuration file
(init!- args)
;; Start the service
(start!-))
最佳答案
这真的不是一个错误。 clojure.tools.logging
库只是其他 Java 日志记录工具的抽象。为了发现哪一个可用,它使用 eval
表达式。欢迎您自行检查:这里有一个快速 search result和一个certain file它在哪里使用。
就您而言,我认为没有必要关心全局read-eval
。这是一个内部功能,谁知道其他库依赖它。如果您验证用户输入并阻止对其进行评估,则可以按原样保留该标志。我想说,SQL注入(inject)和XSS是你首先应该担心的事情。
关于clojure.tools.logging EvalReader 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160633/
我认为这是 clojure/tools.logging 中的一个错误。我有以下 db.clj 文件。它做什么并不重要。重要的是,为了安全起见,我禁用了*read-eval*。我调用 db/start
我是一名优秀的程序员,十分优秀!