1
我在我的Java应用程序中嵌入了jython。用户将能够提交和执行一些python脚本。我想确保他们不会从这些脚本中访问一些易受攻击的java包/类。另一种选择是根本禁用java整合。如何从Jython中禁用对某些Java包的调用
我在我的Java应用程序中嵌入了jython。用户将能够提交和执行一些python脚本。我想确保他们不会从这些脚本中访问一些易受攻击的java包/类。另一种选择是根本禁用java整合。如何从Jython中禁用对某些Java包的调用
有可能设置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);
}
}
看看java安全管理器,它允许您选择可以访问或不可访问的内容。