Предотвращение модификации кода сервера RMI - PullRequest
3 голосов
/ 02 ноября 2010

Я пишу клиент-серверное решение, использующее Java RMI (через проект Cajo).

Я хочу сделать сервер максимально безопасным.Я понимаю, что с помощью отражения Java злонамеренный клиент сможет просматривать все имена методов и имена полей внутри любого данного объекта, который либо связан в регестрировании RMI, либо «проксирован» с сервера (В Cajo прокси-элементобъект, который фактически находится на сервере, но клиент может ссылаться на него).Однако сможет ли злонамеренный клиент просмотреть какую-либо программную логику или изменить какой-либо код на сервере?Или как насчет просмотра фактического содержимого полей?

Пожалуйста, предположите, что физический доступ к серверу не разрешен, и единственный сетевой доступ к серверу через TCP-порт Cajo (1198).1006 * Спасибо

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

RMI основан на прокси-объектах и ​​сериализации.

  • Прокси-объекты: они содержат только методы, указанные в интерфейсе, все остальные методы и поля исходного Объекта не существуют в прокси-сервере и не могут быть доступны через отражение. Атаки невозможны, поскольку все методы уже доступны в интерфейсе.

  • Сериализованные объекты: являются копиями значений на стороне сервера один на один, все методы и поля могут быть доступны на клиенте, но изменения в клиентской копии не передаются на сервер, поскольку обе копии независимы. Объект с измененными полями все еще можно использовать в качестве аргумента метода RMI, поэтому проверьте введенные данные на сервере.

0 голосов
/ 02 ноября 2010

Я понимаю, что с помощью Java отражение, злонамеренный клиент будет иметь возможность просматривать все имена методов и имена полей внутри любого данного объекта который либо был связан в RMI регестры или "прокси" с сервера

Правильно. Однако, что являются этими полями? Просто IP-адрес: порт и некоторые магические числа для методов, которые будут прокси Здесь не о чем беспокоиться, нет ничего, что клиент уже не может использовать обычными средствами.

Однако сможет ли злонамеренный клиент просмотреть любую логику программы или изменить любую код на сервере?

Нет. Он не имеет доступа к серверу, кроме как через прокси. Он вообще не видит реальных реализаций удаленного объекта.

Или как насчет просмотра фактического содержимого полей?

Нет, по той же причине.

...