Запрет System.exit в Groovy веб-консоли без файла политики безопасности - PullRequest
0 голосов
/ 16 сентября 2009

В нашем приложении есть консоль отладки администратора, которая позволяет вам вводить скрипт и отправьте его, чтобы получить результат обратно. Мы не беспокоимся о злонамеренные пользователи, но хотели бы предотвратить основные вещи, как кто-то вход в System.exit (1) просто чтобы посмотреть, что он делает. К несчастью, добавление файла политики безопасности не вариант. Есть ли другой путь песочничать скрипт?

Ответы [ 3 ]

3 голосов
/ 04 декабря 2009

Я посмотрел Groovy на «NoExitSecurityManager» и обнаружил, что он делает именно это: запрещает System.exit () ... чего недостаточно.

Моим решением было создание моего собственного класса "DisallowAllSecurityManager", который расширяет SecurityManager и запрещает все, что не нужно скрипту, например, доступ на запись в файловую систему или подключение к другим хостам, создавая исключение SecurityEx в каждом методе проверки ..

Но: Вы не можете выдать исключение во всех методах проверки ... Вот список проверок .. методов, которые вам нужно разрешить:

  • checkCreateClassLoader ()
  • checkMemberAccess ()
  • checkPackageAccess ()
  • checkPermission ()
  • checkPropertyAccess ()
  • checkRead ()

Когда вы хотите оценить ваш скрипт Groovy, вы можете сделать это следующим образом, ограничив только скрипт Groovy:

SecurityManager securityManager = System.getSecurityManager();
try {
 System.setSecurityManager(new DisallowAllSecurityManager());
 Object result = groovyShell.evaluate(expression);
        ...
} catch (...) {
        ...
} finally {
        System.setSecurityManager(securityManager);
}
3 голосов
/ 16 сентября 2009

Groovy поставляется со специальным менеджером безопасности для этого. Просто установите его перед запуском скрипта,

        System.setSecurityManager(new NoExitSecurityManager());
0 голосов
/ 23 апреля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...