我使用 Clojail 进行沙盒处理,它适用于clojure.core
函数,但是当涉及到其他命名空间时,它无法按预期工作。
我需要沙箱(限制)clojure.string/blank?
功能。
(defn blacklist-symbols
[]
(testers/blacklist-symbols
'#{alter-var-root
intern
eval
clojure.string/blank?
...}))
这应该抛出安全例外,但事实并非如此。
(sb '(do
(println "Hey: " (clojure.string/blank? ""))))
答案 0 :(得分:0)
如果我理解正确,它应该是这样的,
(defn blacklist-symbols
[]
(testers/blacklist-symbols
#{'alter-var-root
'intern
'eval
'clojure.string/blank?
...}))
完全测试的例子
user=> (ns my.project
#_=> (:use [clojail.core :only [sandbox]]
#_=> [clojail.testers :only [blacklist-symbols blacklist-objects]]))
nil
my.project=>
my.project=> (def tester [(blacklist-symbols #{'alter-var-root 'clojure.string/blank?})
#_=> (blacklist-objects [java.lang.Thread])]) ; Create a blacklist.
#'my.project/tester
my.project=> (def sb (sandbox tester :timeout 5000))
#'my.project/sb
my.project=>
my.project=> (sb '(println (clojure.string/blank? "")))
AccessControlException access denied ("java.lang.RuntimePermission" "createClassLoader") java.security.AccessControlContext.checkPermission (AccessControlContext.java:457)
您可以在图书馆主页中找到该示例 https://github.com/Raynes/clojail