15

我们正在尝试在“企业”产品中提供可编写脚本的元素。我们想使用 groovy,但我们很难确保非常基本的东西。

例如,我们想阻止一个客户简单地去

Class.forName("my.company.internal.SecruityTools").runAsAwesome(...)

我们已经安装了一个安全管理器,它的策略只允许accesDeclaredMembers并覆盖了该checkPackageAccess方法,并且只允许列入白名单的包。不幸的是,默认的类加载器链似乎只是绕过了这一点,并以任何方式加载类。

这似乎是一个相当普遍/讨论过的问题,但我一生都找不到一个库,甚至找不到一篇关于如何在更大的应用程序的上下文中锁定不受信任的脚本的好的博客文章。

有没有人成功地做到了这一点?我错过了一些相当明显的帖子/概念吗?是否已经有一个可靠的库来解决这个问题?也许Groovy.tinFoilHatMode(true)

4

4 回答 4

7

看看Groovy 沙盒。您可以使用它来停止诸如System.exit(0)或之类的事情new File(“/etc/passwd”)

于 2013-07-12T20:22:23.940 回答
2

看看java-sandbox。还有一个如何使用 groovy 的教程:http ://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html

于 2013-06-14T13:45:18.527 回答
1

你看过使用GroovyCodeSource

于 2012-04-29T02:08:04.383 回答
1

我们最终做的是上述事情的组合,但真正的魔力是实现这个 AST 转换器,它将任何表达式(包括this,或隐式this)包装在访问检查中。

于 2015-06-18T19:46:44.430 回答