Как отключить вызовы определенных пакетов Java из Jython - PullRequest
1 голос
/ 05 мая 2011

Я встраиваю jython в свое Java-приложение. Пользователи смогут отправлять и выполнять некоторые скрипты Python. Я хочу убедиться, что они не получат доступ к некоторым уязвимым пакетам / классам Java из этих сценариев. Другой вариант - вообще отключить Java-интеграцию.

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Существует возможность установить пользовательский загрузчик классов, который будет использовать jython.Код выглядит так:

final PySystemState state = new PySystemState();
state.setClassLoader(new MyClassLoader());
Py.setSystemState(state);

А затем в MyClassLoader вы можете проверить, к какому классу java обращаются в скрипте, и отклонить его на основании некоторых критериев.Это будет выглядеть примерно так

public class MyClassLoader extends ClassLoader
{
  @Override
  protected synchronized Class<?> loadClass(final String className, final boolean resolve)
      throws ClassNotFoundException
  {
    if (className.startsWith("secret.class"))
    {
      throw new RuntimeException();
    }

    return MyClassLoader.getSystemClassLoader().loadClass(className);

  }
}
1 голос
/ 05 мая 2011

Посмотрите на менеджер безопасности java, который позволяет вам выбирать, к чему можно получить доступ или нет.

...