Это может показаться очень широким вопросом, но любая помощь приветствуется.
У меня есть клиент-серверное решение, написанное на Java, которое использует проект Cajo (который использует RMI). Я просто хочу попытаться сделать свое решение максимально безопасным, учитывая конфиденциальные данные, которые будут передаваться между сервером и клиентом.
До сих пор мои идеи заключались в том, чтобы сделать все мои классы "окончательными", а также вызвать "не сериализуемое" исключение для всех моих классов на сервере (за исключением объекта, связанного в реестре RMI, и любых объектов, которые на самом деле нужно перенести, конечно).
Может кто-нибудь придумать какие-нибудь другие идеи?
Я знаю, что кто-то может написать вредоносный клиент - это не сложно, поскольку вы можете узнать API удаленного объекта, используя отражение. Однако могу ли я что-нибудь сделать для защиты классов / объектов доступа злоумышленника на сервере, к которым они не должны получить доступ?
Большое спасибо
Обновление:
Спасибо всем за полезные советы, и извините, что так долго возвращались к вам. Мой текущий ход мыслей - создать безопасную систему:
- Использовать OpenVPN между клиентами и сервером. Это означает, что вам нужен доступ к физическому клиенту для получения доступа. (Примечание: из-за 2 пунктов ниже, VPN фактически будет между сервером и локальной сетью офиса. Я чувствую, что это достаточно безопасно)
- Используйте имена пользователей и пароль (возможно, используя JBOSS) для аутентификации между сервером и клиентом. Это означает, что для выполнения любых действий на сервере злоумышленнику потребуются имя пользователя и пароль.
- Бросить исключение «не подлежит серзанию» для всех объектов, кроме тех, которые фактически должны быть отправлены по сети. Это предотвращает отправку конфиденциальных объектов по сети.
Звучит справедливо? Пожалуйста, поправьте меня, если я что-то упустил.
Дальнейшее обновление : Похоже, что существует некоторая путаница из-за того, что я пытаюсь предотвратить. То, что я пытаюсь предотвратить, это кто-то "взломать" сервер. Таким образом, в основном используется сервер для сброса / удаления всей его базы данных, например.
Спасибо