2017-01-02 8 views
0

Я уже использую Java 8 и это Nashorn JavaScript двигателя. И в моем приложении я получаю доступ к файлам сценариев javaScript из Java classess для различных целей. И все же можно получить доступ к Java-классам из кодов javaScript. Но так как JavaScripts в моих приложениях также может быть написан третьей стороной, Я хочу ограничить их (сценарии JS) от доступа к модулям Java. (В частности, запретить некоторые классы Java)Запрещать скрипты от доступа к определенным классам Java с помощью Java диспетчера безопасности

Я не хочу ограничивать доступ к классам Java, просто ищу способ ограничить или запретить некоторые определенные классы Java.

В Nashorn мы можем сделать это с помощью ClassFilters (overiding 'exposeToScripts()' метод), как показано ниже.

class MyCF implements ClassFilter { 
    @Override 
    public boolean exposeToScripts(String s) { 
     if (s.compareTo("myPackage.MyClass") == 0) return false; 
     return true; 
    } 
} 

Но , как мы можем использовать диспетчер безопасности Java, чтобы сделать то же самое, или путь, используя ClassFilter (упомянутую выше) достаточно, чтобы поймать и ограничить все нежелательный доступ класса Java.

ответ

1

ClassFilter не является заменой для менеджера безопасности! Страница ClassFilter JEP ->http://openjdk.java.net/jeps/202 делает это понятным в разделе non целей:

/[Это не делает] Менеджеры безопасности избыточны для скриптов. Внедрение приложений должно по-прежнему включать управление безопасностью, прежде чем оценивать скрипты из ненадежных источников. Только фильтрация классов не предоставляет полный сценарий «песочница»./

ClassFilter - это более тонкое управление над диспетчером безопасности. Например, вы можете избежать создания потоков из сценариев, запретив доступ к классу java.lang.Thread [и это подклассы по имени].

+0

Спасибо за разъяснение. Итак, любая идея о том, как это сделать с помощью Security Manager? то есть ограничить доступ к определенным классам Java для скриптов. – prime

+0

См. Свойство package.access в этом документе -> http://docs.oracle.com/javase/7/docs/technotes/guides/security/smPortGuide.html Обратите внимание, что предотвращение доступа к пакетам Java для всех классов. Не только для скриптовых классов! Я упомянул менеджера безопасности для песочницы - не обязательно для предотвращения доступа к доступу к Java из сценариев. Я рекомендую вам запустить с менеджером безопасности и установить ClassFilter для фильтрации доступа к определенным классам из * scripts *. security.access надлежащим образом обычно устанавливается в стандартный файл безопасности в JRE. –

+0

Я думаю, что вы ссылаетесь на файл java.policy в папке/security в java, jre. Я настроил собственный диспетчер безопасности, используя предоставленный класс securityManager, ну да, как вы предположили, мы также можем использовать Nashorn ClassFilter. Это то, что я делаю в настоящее время, мне просто нужно проверить, что эти классы Java ограничены доступом третьих сторон, а не только для сценариев JS. – prime

 Смежные вопросы

  • Нет связанных вопросов^_^