我有一个用于受信任的应用程序代码的 ClassLoader 和一个用于用户提交的(不受信任的)代码的单独的 ClassLoader。
我希望安全管理器限制用户提交的代码。如何从 SecurityManager 中检查调用方来源?查看伪代码:
System.setSecurityManager(new SecurityManager() {
public void checkPermission(Permission permission) {
if (/*caller class is not loaded by the trusted classloader*/) {
throw new SecurityException("You do not have permissions.");
}
}
});
我已经尝试过的:
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass().getClassLoader()首先检查权限,以便它给出堆栈溢出异常。
Thread.currentThread().getStackTrace()[2].getClassLoaderName()是不安全的,因为它只提供类加载器名称而不是类对象,如果不受信任的加载器的规范名称与受信任的加载器相同,那么这是一个安全问题。
慕姐8265434
慕后森
相关分类