Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security GroovyClassLoader类安全性_Security_Grails_Groovy_Groovyclassloader - Fatal编程技术网

Security GroovyClassLoader类安全性

Security GroovyClassLoader类安全性,security,grails,groovy,groovyclassloader,Security,Grails,Groovy,Groovyclassloader,我正在构建一个Grails应用程序,允许用户编写Groovy代码,然后在我的框架内执行。当然,这是一个巨大的安全威胁,因为用户可能输入恶意代码 Groovy类正在使用GroovyClassLoaderparseClassString动态编译 我希望严格限制用户编写的Groovy类可以访问的类和操作。似乎有两个通用选项,它们不是相互排斥的: 1要使用SecurityManager和策略文件限制特定代码源中的代码可以执行的操作 2扩展GroovyClassLoader并实现包白名单或黑名单,以限制用

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

Groovy类正在使用GroovyClassLoaderparseClassString动态编译

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

1要使用SecurityManager和策略文件限制特定代码源中的代码可以执行的操作

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

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

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

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


我正在考虑扩展GroovyClassLoader以防止用户脚本加载,例如,首先加载我的域类。这是否足够?你能建议点别的吗?如何确保我没有留下漏洞?

您可以采取另一种方式,不保护方法,而是向用户提供您的环境代码沙盒

比如说


P>也考虑白名单政治:拒绝一切,但不允许。这将防止您忘记smth critical。

谢谢,我来看看这个!不过,我有点担心性能,因为我的用户脚本应该处理大量数据。此外,我不确定这在多大程度上比白名单类加载器更好。攻击者能否绕过我的类加载器,从而被沙盒库阻止?