Запрет вызова системных функций в подклассах в отличном скрипте с SecureASTCustomizer - PullRequest
1 голос
/ 25 июня 2019

Я работаю над возможностью вызова Groovy скрипта из Java для некоторых расчетов.Поскольку эти вычисления могут использоваться любыми людьми, синтаксис сценария должен быть ограничен.Поэтому я хочу ограничить вызов любого метода класса System или других вредоносных методов, таких как System.exit (0).Я использую CompilerConfiguration с SecureASTCustimizer со следующими настройками:

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);

Groovy-скрипт выглядит следующим образом:

// 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() таким образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...