【发布时间】:2011-04-23 02:19:20
【问题描述】:
在另一个question 的对话之后,提出了一个有趣的问题。
使用安全管理器加载的类受到相应安全性的保护。这种安全性可以禁用反射(例如)。
问题是:是否可以使用 sun.misc.unsafe 破坏安全管理器?如果是,怎么做?
编辑
将SecuredClassLoader 更改为有问题的安全经理。
【问题讨论】:
标签: java security classloader
在另一个question 的对话之后,提出了一个有趣的问题。
使用安全管理器加载的类受到相应安全性的保护。这种安全性可以禁用反射(例如)。
问题是:是否可以使用 sun.misc.unsafe 破坏安全管理器?如果是,怎么做?
编辑
将SecuredClassLoader 更改为有问题的安全经理。
【问题讨论】:
标签: java security classloader
没有。 sun.misc.Unsafe 类需要访问检查,就像任何其他特权操作一样。您可以使用自定义类加载器或安全管理器来阻止它。这是一个带有空安全管理器的简单示例,显示它会抛出一个AccessControlException:
System.setSecurityManager(new SecurityManager());
Unsafe unsafe = Unsafe.getUnsafe();
【讨论】:
什么是“安全类加载器”?安全类加载器?尽管它的名字是不安全的。它所做的只是将类加载源限制到特定的代码位置。
因此,您甚至不需要任何不安全的操作来“破坏”它。例如,确保在 SecureClassLoader 甚至获得控制权之前,替换的被黑类在类路径中。
该线程中的某个人已经告诉过你——你不能在不安全的环境中拥有一个安全的位置。如果你的代码部署到用户机器上,用户就是上帝,没有 JVM 安全可以帮助你,因为 JVM 是更强大的原生事物之上的一个微小层。
【讨论】: