我正在构建一个Grails应用程序,它允许用户编写Groovy代码,然后在我的框架中执行这些代码。当然,这是一个巨大的安全威胁,因为用户可能会输入恶意代码。
Groovy类是用GroovyClassLoader#parseClass(String)动态编译的。
我想严格限制用户编写的Groovy类可以访问的类和操作。似乎有两个不相互排斥的通用选项:
1)为了使用SecurityManager和策略文件来限制来自特定codeSource的代码被允许做什么,
2)扩展GroovyClassLoader,实现套餐白名单或黑名单,限制用户代码可以访问哪些类。
不受信任的代码不得以任何方式访问GORM或数据库、读取或写入本地磁盘、打开网络套接字、写入控制台等。
我已经实现了SecurityManager方法,它部分起作用了,阻止了至少读取文件、打开套接字、退出VM等的能力。
但是,攻击者仍然可以通过Groovy println(String)向控制台写入数据(这不是一个大问题),更糟糕的是:她可以成功地执行User.list()操作,以获取所有用户及其散列密码,以及数据库中的其他所有内容!我如何防止这种情况发生?
我正在考虑扩展GroovyClassLoader,以防止用户脚本加载,例如,首先加载我的域类。这是否足够呢?你有没有其他的建议?我怎样才能确保我没有留下任何漏洞?
发布于 2014-01-10 23:50:44
https://stackoverflow.com/questions/21048378
复制相似问题