如何拒绝客户端解除 RMI 注册表的绑定



我写了一个简单的RMI应用程序。我发现客户端在获得RMI-Registry后可以成功执行Registry.unbind()方法。在我看来,这是一种安全风险。为什么允许客户端在远程注册表中解绑名称?一个邪恶的人可以通过修改代码来做到这一点,而我的所有其他客户端都无法连接到我的服务器,因为绑定已被移除。

是否有可能在 Java 策略中否认这一点?

仅当客户端与注册表在同一主机中运行时,才会发生这种情况。如果您在自己的客户中遇到安全问题,那么您面临的问题比RMI可以为您解决的任何事情都要大得多。

来自 Javadoc for Registry:

注册表实现可以选择限制对部分或全部的访问 其方法(例如,改变注册表的方法 绑定可能仅限于源自本地主机的调用)。 如果注册表方法选择拒绝对给定调用的访问, 它的实现可能会抛出 AccessException,因为它 扩展 RemoteException) 将在以下情况下包装在 ServerException 中 被远程客户端捕获。

如果愿意,可以选择阻止此行为(它实际上是大多数注册表实现的默认行为)。

最新更新