1

我正在构建一个 Grails 应用程序,它允许用户编写 Groovy 代码,然后在我的框架中执行。当然,这是一个巨大的安全威胁,因为用户可能会输入恶意代码。

Groovy 类正在使用GroovyClassLoader#parseClass(String).

我想严格限制用户编写的 Groovy 类可以访问的类和操作。似乎有两个通用选项,它们并不相互排斥:

1)使用和策略文件来限制允许SecurityManager特定代码执行的操作,codeSource

2)扩展GroovyClassLoader并实现包白名单或黑名单,以限制用户代码可以访问哪些类。

不受信任的代码不能以任何方式访问 GORM 或数据库,读取或写入本地磁盘,打开网络套接字,写入控制台等。

我已经实现了 SecurityManager 方法并且它部分工作,阻止了至少读取文件、打开套接字、退出 VM 等的能力。

然而,攻击者仍然可以通过 Groovy 写入控制台println(String)(不是一个重要问题),更糟糕的是:她可以成功User.list()获取所有用户及其哈希密码,以及数据库中的所有其他内容!我怎样才能防止这种情况?

我正在考虑扩展 GroovyClassLoader 以防止用户脚本加载,例如我的域类。这足够了吗?你会建议别的吗?我怎样才能确保我没有留下任何漏洞?

4

1 回答 1

0

您可以采用另一种方式,而不是保护方法,而是将您的环境提供给用户代码(沙箱)

例如看这里。

还要考虑政治白名单:拒绝所有,但不允许的。它会防止你忘记关键。

于 2014-01-10T15:50:43.627 回答