如何沙箱clojure.string / blank?与Clojail在Clojure?

时间:2017-02-07 23:16:18

标签: java clojure lisp sandbox clojurescript

我使用 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? ""))))

1 个答案:

答案 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