我很久以前就问过这个问题,我正在回答我自己的问题,因为出现了额外的信息并且也出现了漏洞,而另一个问题没有正确解决这个问题。
基本上默认的读取函数是不安全的。
2013 年,在所有 Ruby 漏洞利用(人们突然对安全隐患感到担忧)之后,Clojure 小组就这个问题展开了激烈的讨论,在一个名为:
" read-eval默认为 false"
Clojure 文档本身明确指出:
http://clojuredocs.org/clojure_core/clojure.core/read
;; WARNING: You SHOULD NOT use clojure.core/read or
;; clojure.core/read-string to read data from untrusted sources. They
;; were designed only for reading Clojure code and data from trusted
;; sources
请注意,即使将read-eval设置为false也是不够的(至少在 Clojure 1.5 之前是这样),因为某些 Java 构造函数可能会被强制调用并通过精心制作恶意输入而产生副作用。
这在名为“Clojure 的阅读器不安全”的博客条目中进行了详细解释
http://www.learningclojure.com/2013/02/clojures-reader-is-unsafe.html
长话短说:使用别的东西,比如clojure.edn
.