我希望运行一些未经验证的脚本(用尚未确定的语言编写,但需要基于 Java,因此 JRuby、Groovy、Jython、BeanShell 等都是候选者)。我希望这些脚本能够做一些事情并限制做其他事情。
通常,我会使用 Java 的 SecurityManager 并完成它。这非常简单,让我可以限制文件和网络访问、关闭 JVM 的能力等。这对于我想要阻止的高级内容非常有效。
但是我想允许一些东西,但只能通过我提供的自定义 API/库。例如,我不想允许直接网络访问打开到 yahoo.com 的 URLConnection,但如果使用 MyURLConnection 完成,我可以。那就是 - 有一组我想要允许的方法/类,然后是我想要禁止的所有其他内容。
我不相信这种类型的安全可以用标准的 Java 安全模型来完成,但也许可以。我对脚本语言本身的性能或灵活性没有特定要求(脚本将是对我的 API 的简单程序调用,具有基本的循环/分支)。因此,即使是对每个反射调用进行安全检查的“大”开销对我来说也是可以的。
建议?