java - 防止 RMI 服务器代码修改

标签 java reflection rmi cajo

我正在编写一个使用 Java RMI 的客户端-服务器解决方案(通过 Cajo 项目)。

我想让服务器尽可能安全。我知道通过使用 Java 反射,恶意客户端将能够查看任何给定对象内的所有方法名称和字段名称,这些对象要么绑定(bind)在 RMI 注册表中,要么从服务器“代理”(在 Cajo 中,代理项是实际驻留在服务器上但客户端可以引用它的对象)。但是,恶意客户端是否能够查看任何程序逻辑或修改服务器上的任何代码?或者查看字段的实际内容怎么样?

请假设不允许对服务器进行物理访问,并且对服务器的唯一网络访问是通过 Cajo TCP 端口 (1198)。

谢谢

最佳答案

RMI 基于代理对象和序列化。

  • 代理对象:这些仅包含接口(interface)中指定的方法,原始对象的所有其他方法和字段不存在于代理中,无法通过反射访问。由于所有方法都已在接口(interface)中公开,因此不可能进行攻击。

  • 序列化对象:服务器端值的一对一副本,所有方法和字段都可以在客户端访问,但对客户端副本的更改不会转发到服务器,因为两个副本都是独立的。具有修改字段的对象仍可用作 RMI 方法的参数,因此请在服务器上验证您的输入。

关于java - 防止 RMI 服务器代码修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075846/

相关文章:

java - 没有参数的 Spring Integration Gateway

c# - 表达式的增量值

go - 遍历具有嵌入结构的结构

java - 从一台服务器串行调用 Java RMI 到另一台服务器

Spring 3.0 RmiProxyFactoryBean : how to change serviceUrl at runtime?

java - 批量替换char

java - 如何创建在soap header 中需要用户名/密码的soap服务

java - Spring/RMI 服务器错误

java - android 媒体播放器中的完成监听器

java - 使用反射调用具有通用参数的方法