使用SecureASTCustomizer防止在常规脚本中的子类中调用系统函数

时间:2019-06-25 07:04:45

标签: java groovy

我正在研究从Java调用Groovy脚本进行某些计算的可能性。由于这些计算可由任何人使用,因此脚本的语法必须受到限制。因此,我想限制对System类的任何方法或其他有害方法的调用,例如System.exit(0)。 我正在使用带有以下设置的带有SecureASTCustimizer的CompilerConfiguration。

CompilerConfiguration conf = new CompilerConfiguration();
SecureASTCustomizer customizer = new SecureASTCustomizer();     
customizer.setClosuresAllowed(true);    
customizer.setMethodDefinitionAllowed(false); 
customizer.setPackageAllowed(false);
customizer.setIndirectImportCheckEnabled(true);
customizer.setReceiversWhiteList(Arrays.asList("java.lang.Object","java.lang.Math", "org.codehaus.groovy.runtime.InvokerHelper"));
        customizer.setImportsWhitelist(Arrays.asList("java.lang.Math","classWithinScript","java.lang.Object", "org.codehaus.groovy.runtime.InvokerHelper"));

conf.addCompilationCustomizers(customizer);

常规脚本如下:

// For table definitions
class classWithinScript{
    String TestName;
    int value;
}
System.exit(0)
//Some calcualtions are done here

这非常有效,如果现在有人输入System.exit(0),则执行被阻止。

但是当我将类更改为:

class classWithinScript{
    String TestName;
    int value;
        def any = System.exit(0)
}
//Some calculations

应用程序终止。

如何以这种方式阻止对System.exit()的调用?

0 个答案:

没有答案