2012-04-13 46 views
0

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

是否有可能否认这一点,也许在Java政策?

回答

1

这只有在客户端与注册表运行在同一主机上时才会发生。如果您遇到自己的客户存在安全问题,那么您将面临比RMI能为您解决的任何问题更大的问题。

0

Javadoc为注册地:

一个注册表实现可以选择限制访问它的方法部分或全部 (例如,方法是变异注册表的 绑定可能被限制在从始发呼叫本地主机)。 如果某个注册表方法选择拒绝某个给定调用的访问,则其实现可能会抛出AccessException,该异常将在远程客户端捕获 时抛出一个ServerException异常(因为它将 扩展为RemoteException)。

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