Security GroovyClassLoader类安全性
我正在构建一个Grails应用程序,允许用户编写Groovy代码,然后在我的框架内执行。当然,这是一个巨大的安全威胁,因为用户可能输入恶意代码 Groovy类正在使用GroovyClassLoaderparseClassString动态编译 我希望严格限制用户编写的Groovy类可以访问的类和操作。似乎有两个通用选项,它们不是相互排斥的: 1要使用SecurityManager和策略文件限制特定代码源中的代码可以执行的操作 2扩展GroovyClassLoader并实现包白名单或黑名单,以限制用户代码可以访问哪些类 不受信任的代码不得以任何方式访问GORM或数据库、读取或写入本地磁盘、打开网络套接字、写入控制台等 我已经实现了SecurityManager方法,它部分工作,阻止了至少读取文件、打开套接字、退出VM等功能 但是,攻击者仍然可以通过Groovy printlnString写入控制台—这不是一个重要问题,更糟糕的是:她可以成功地执行User.list以获取所有用户及其哈希密码,以及数据库中的所有其他内容!我怎样才能防止这种情况Security GroovyClassLoader类安全性,security,grails,groovy,groovyclassloader,Security,Grails,Groovy,Groovyclassloader,我正在构建一个Grails应用程序,允许用户编写Groovy代码,然后在我的框架内执行。当然,这是一个巨大的安全威胁,因为用户可能输入恶意代码 Groovy类正在使用GroovyClassLoaderparseClassString动态编译 我希望严格限制用户编写的Groovy类可以访问的类和操作。似乎有两个通用选项,它们不是相互排斥的: 1要使用SecurityManager和策略文件限制特定代码源中的代码可以执行的操作 2扩展GroovyClassLoader并实现包白名单或黑名单,以限制用
我正在考虑扩展GroovyClassLoader以防止用户脚本加载,例如,首先加载我的域类。这是否足够?你能建议点别的吗?如何确保我没有留下漏洞?您可以采取另一种方式,不保护方法,而是向用户提供您的环境代码沙盒 比如说
P>也考虑白名单政治:拒绝一切,但不允许。这将防止您忘记smth critical。谢谢,我来看看这个!不过,我有点担心性能,因为我的用户脚本应该处理大量数据。此外,我不确定这在多大程度上比白名单类加载器更好。攻击者能否绕过我的类加载器,从而被沙盒库阻止?