【问题标题】:GroovyClassLoader parseClass securityGroovyClassLoader parseClass 安全性
【发布时间】:2014-01-10 15:40:32
【问题描述】:

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

Groovy 类正在使用GroovyClassLoader#parseClass(String) 即时编译。

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

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

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

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

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

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

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

【问题讨论】:

    标签: security grails groovy groovyclassloader


    【解决方案1】:

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

    例如看here

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

    【讨论】:

    • 谢谢,我看看这个!不过,我有点担心性能,因为我的用户脚本应该处理大量数据。此外,我不确定这会比白名单类加载器更好的程度。攻击者能否以沙盒库阻止的方式绕过我的类加载器?
    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2014-09-13
    • 2010-09-30
    • 2017-04-29
    相关资源
    最近更新 更多