为什么不允许未签名的applet创建自定义ClassLoaders?

时间:2011-02-05 18:50:14

标签: java security applet classloader unsigned

Java applet不允许您编写自定义ClassLoader,除非您对applet进行签名。为什么会这样?自定义ClassLoader只是查找类的工具。除了通过调用私有“defineClass”方法之外,您实际上无法加载该类,该方法是“受信任的”代码,因为它是由VM编写和控制的,而不是由您的applet编写和控制的。这并不像你获得的权限多于动态加载类的能力......这实际上什么都不是。

我想作为一个侧面问题:还有其他方法可以动态地从

开始
byte[] => Class

这是未签名的小程序允许的吗?

2 个答案:

答案 0 :(得分:4)

defineClass有一个ProtectionDomain参数,您可以使用包含AllPermission的PermissionCollection传递该参数,这将允许您基本上对主机执行任何操作。

答案 1 :(得分:0)

注意,您可以使用ClassLoader创建java.net.URLClassLoader.newInstance。正如bkail所指出的,自定义ClassLoader可以创建具有任意权限的类,并绕过其他安全约束。至于为什么没有比java.net.URLClassLoader.newInstance更通用的东西,那么就没有。{/ p>