Как я защищаю выполненное использование сценариев javax.scripting?

Или вручите подразделения или используйте SimpleDateFormat API.

long start = System.currentTimeMillis();
// do your work...
long elapsed = System.currentTimeMillis() - start;
DateFormat df = new SimpleDateFormat("HH 'hours', mm 'mins,' ss 'seconds'");
df.setTimeZone(TimeZone.getTimeZone("GMT+0"));
System.out.println(df.format(new Date(elapsed)));

Редактирование Мороженое : Это показали в комментариях, что этот подход только работает на меньшие продолжительности (т.е. меньше чем день).

16
задан Jeffrey D. Hoffman 28 August 2009 в 13:49
поделиться

2 ответа

Оказывается, javax.scripting не обеспечивает безопасности фреймворк. После некоторого поиска я нашел документ в кеше Google, в котором предлагалось попробовать использовать структуру Java doPrivilegedAction , но после некоторых экспериментов я не смог получить это, чтобы предотвратить открытие сокетов или доступ к файловой системе скриптами.

После того, как я задал этот вопрос, я обнаружил, что его ранее задавали здесь, в StackOverflow: Как можно запустить Javascript с помощью Rhino для Java в песочнице? На этой странице ложно указано, что Rhino, включенный в JDK6, имеет безопасность уже отработано. Как я указал, Мне удалось открыть сокеты и другие вредоносные действия из скрипта.

В конце концов я отказался от javax.scripting и встроил Rhino напрямую. Создав собственный ContextFactory , который также является ClassShutter , я легко смог добиться двух результатов:

  1. Ограничивает время выполнения скрипта до максимального временного лимита
  2. Ограничивает доступ класса к те, которые у меня есть в белом списке, это в основном java.lang. * и несколько избранных классов в иерархии моего сервера.

CodeUtopia (на которые я не могу ссылаться, потому что как новый пользователь, Мне не разрешено ссылаться на несколько страниц в одном сообщении; но это связано в другом сообщении StackOverflow) было ценным для описания архитектуры ClassShutter и Rhino '

18
ответ дан 30 November 2019 в 22:17
поделиться

http://codeutopia.net/blog/2009 / 01/02 / sandboxing-rhino-in-java / описывает способ создания песочницы для rhino, а javax.scripting использует Rhino в качестве движка сценариев JS, поэтому вы должны иметь возможность использовать вышеуказанное, хотя имена пакетов могут отличаться .

Я работал над Java-приложением, которое нужен Rhino для написания скриптов. Приложение потребуется запустить ненадежный JavaScript код от третьих лиц, поэтому мне пришлось найти способ заблокировать доступ ко всей Java методы, кроме тех, которые я хотел. Это не было бы проблемой, если бы был простой способ отключить LiveConnect - особенность Rhino, которая предоставляет java доступ к скриптам - но есть нет такой вещи.

Однако после долгих поисков вокруг, я наконец нашел способ сделать это без особого взлома. В Фактически, это можно сделать, просто расширив несколько классов Rhino и используя сеттеры, позволяющие переопределить некоторые по умолчанию.

2
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: