2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面了解有关如何工作的更多信息。

+2 投票
Clojure
封闭

clojure.xml 默认处理 XML 外部实体。这允许在处理的XML中包含外部文件,既可以是本地文件系统也可以是远程服务器。当 处理不受信任的输入 时,这似乎是个糟糕的想法。

以下是一个示例,其中在结果中包含 /etc/hostname(如果您计算机上没有那个文件,结果是 FileNotFoundException)。

(require 'clojure.xml)

(def xml-str "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM \"file:///etc/hostname\" >]>
<foo>&xxe;</foo>")

(with-open [input (java.io.ByteArrayInputStream. (.getBytes xml-str))]
  (clojure.xml/parse input))
;; => {:tag :foo, :attrs nil, :content ["nixos\n"]}

据我所知,这个特性很少使用,例如 data.xml 默认会禁用它。我们可以在 clojure.xml 中也禁用它,以便默认更安全吗?

注释关闭: 发布在 1.11.0-alpha4 中

1 答案

+1 投票
...