我使用Clojail用於沙盒,它對clojure.core
函數很有用,但是當涉及到其他名稱空間時,它無法按預期工作。如何沙盒clojure.string /空白?與Clojail在Clojure中?
我需要沙盒(限制)clojure.string/blank?
函數。
這應該拋出一個安全異常但事實並非如此。
(sb '(do
(println "Hey: " (clojure.string/blank? ""))))
我使用Clojail用於沙盒,它對clojure.core
函數很有用,但是當涉及到其他名稱空間時,它無法按預期工作。如何沙盒clojure.string /空白?與Clojail在Clojure中?
我需要沙盒(限制)clojure.string/blank?
函數。
這應該拋出一個安全異常但事實並非如此。
(sb '(do
(println "Hey: " (clojure.string/blank? ""))))
它應該是這樣的,如果我理解正確的話,
(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
'#{alter-var-root intern eval clojure.string/blank? ...}和#{'alter-var-root 'intern 'eval 'clojure.string/blank? ...}是同樣的東西。你可以在收集聲明之前放撇號。 –
它不起作用,所以會得到相同的結果。您是如何得出這個結果的? –
https://gist.github.com/zerg000000/315fb89c2c6694210734d55115dadab6 –
在這種情況下,「不起作用」是什麼意思?你有錯誤嗎?如果是這樣,那是什麼? – nhouser9
@ nhouser9更新了問題。 –