防止执行未经授权的代码

djh*_*rld 4 clojure

我正在编写一个接受一系列Clojure表单的应用程序,当它们被评估时,结果将返回到列表中

所以例如输入就是

(data "abc" :identifier)
(data "gee" :identifier)
(content "def" :identifier [1 2 3 4 5])
Run Code Online (Sandbox Code Playgroud)

后端中的函数基本上只是将这些函数转换为Clojure映射,例如

(defn data [text id]
    {:text text :id id})
(defn content [text id cont]
    {:text text :id id :cont cont})
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我现在处理代码的方式是接受输入(-> input read-string eval)并相应地获取内容.这很糟糕,因为任何人都可以(System/exit 1)在输入中添加一个狡猾的东西并关闭JVM

是否有任何方法可以将Clojure表单"白名单",可以在此步骤中执行并将所有令人讨厌的内容列入黑名单?或者我太天真地使用Clojure表单作为数据输入机制?

Art*_*ldt 6

查看Clojail及其2011年Clojure Conj的精彩视频!

你可以在irc.freenode.net上的#clojure上与它进行交互,并尝试突破它,如果你想:)通过句柄lazybot.它也用于4clojure.org