【问题标题】:How to sandbox clojure.string/blank? with Clojail in Clojure?如何沙箱 clojure.string/blank?在 Clojure 中使用 Clojail?
【发布时间】:2017-06-25 09:39:27
【问题描述】:

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

【问题讨论】:

  • 在这种情况下“不起作用”是什么意思?你有错误吗?如果有,是什么?
  • @nhouser9 更新问题。

标签: java clojure lisp sandbox clojurescript


【解决方案1】:

应该是这样的,如果我理解正确的话,

(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 实习生 eval clojure.string/blank? ...} 和 #{'alter-var-root 'intern 'eval 'clojure.string/blank? ...} 是相同的东西。您可以在集合声明之前加上撇号。
  • 它不起作用。仍然得到相同的结果。你是如何得出这个结果的?
  • 您收到此异常是因为您没有将 ~/.java.policy 文件添加到您的 Classpath。这不是 Clojail 抛出的安全异常。这是配置异常。
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多