2017-02-07 41 views
2

我使用Clojail用於沙盒,它對clojure.core函數很有用,但是當涉及到其他名稱空間時,它無法按預期工作。如何沙盒clojure.string /空白?與Clojail在Clojure中?

我需要沙盒(限制)clojure.string/blank?函數。

​​

這應該拋出一個安全異常但事實並非如此。

(sb '(do 
     (println "Hey: " (clojure.string/blank? "")))) 
+0

在這種情況下,「不起作用」是什麼意思?你有錯誤嗎?如果是這樣,那是什麼? – nhouser9

+0

@ nhouser9更新了問題。 –

回答

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

+0

'#{alter-var-root intern eval clojure.string/blank? ...}和#{'alter-var-root 'intern 'eval 'clojure.string/blank? ...}是同樣的東西。你可以在收集聲明之前放撇號。 –

+0

它不起作用,所以會得到相同的結果。您是如何得出這個結果的? –

+0

https://gist.github.com/zerg000000/315fb89c2c6694210734d55115dadab6 –