2013-04-17 5 views
3

Я пытаюсь оценить выражение MVEL в песочнице. К сожалению, по умолчанию MVEL включает все классы java.lang. * В языке выражений, поэтому пользователь может вызвать «Runtime.exit()» и убить всю систему.MVEL: как сохранить java.lang. * Классы из выражений?

Как я могу исключить все классы, которые я явно не добавил с помощью addImport()?

Я не смог сделать головы или хвосты VariableResolvers.

ответ

2

Насколько я знаю, это не поддерживается.

Я столкнулся с этой необходимостью некоторое время назад в проекте моей компании. Нам пришлось немного изменить MVEL, чтобы представить способ настройки настраиваемой политики для контроля доступа к типам и методам. Проблема заключается в том, что вы также можете получить доступ к любому классу по его полностью квалифицированному имени, поэтому было не просто удаление импорта по умолчанию. К сожалению, у меня нет собственного кода, чтобы сделать его доступным.

+1

Это очень плохо. Мне очень нравится MVEL. – ccleve

0

Вы пытались использовать AspectJ для ограничения этих вызовов от MVEL?

+0

Не знаете, как это помогает? Реализует какую-то изолированную программную среду безопасности? – ccleve

-1
ParserContext ctx = new ParserContext(); 

ctx.addImport("System", String.class); 
ctx.addImport("Runtime", String.class); 
+0

Ваш ответ под угрозой удаления. Вам действительно нужно объяснить, что здесь происходит и как это отвечает на поставленный вопрос. –