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
...