Как запретить Клиенту отменять привязку Реестра RMI?

Я пишу простое приложение RMI. Я обнаружил, что Клиент после получения RMI-Registry может успешно выполнить метод Registry.unbind(). На мой взгляд, это риск для безопасности. Почему Клиенту разрешается отвязывать Имя в удаленном Реестре? Злой человек может сделать это с модификацией Кодекса, и все мои другие Клиенты не могут подключиться к моему Серверу, потому что привязка была удалена.

Есть ли возможность отрицать это, может быть, в политике Java?

2 ответа

Решение

Это может произойти, только если клиент работает на том же хосте, что и реестр. Если у вас есть проблемы с безопасностью у ваших клиентов, у вас есть гораздо большая проблема, чем что-либо, что RMI может решить для вас.

Из Javadoc для реестра:

Реализация Реестра может решить ограничить доступ к некоторым или всем его методам (например, методы, которые изменяют привязки реестра, могут быть ограничены вызовами, исходящими с локального хоста). Если метод реестра решает запретить доступ для данного вызова, его реализация может вызвать исключение AccessException, которое (поскольку оно расширяет RemoteException) будет помещено в исключение ServerException при перехвате удаленным клиентом.

У вас есть возможность предотвратить это поведение, если вы так решите (это поведение по умолчанию для большинства реализаций реестра).

Другие вопросы по тегам