3

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

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

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

谢谢

4

2 回答 2

2

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

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

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

于 2010-11-02T08:53:32.583 回答
0

我了解,通过使用 Java 反射,恶意客户端将能够查看任何给定对象内的所有方法名称和字段名称,这些对象要么已绑定在 RMI 记录中,要么已从服务器“代理”

正确的。但是那些领域是什么?只是一个 IP 地址:端口和一些被代理方法的幻数。那里没有什么可担心的,没有任何东西暴露在客户无法通过正常方式使用的情况下。

但是,恶意客户端是否能够查看任何程序逻辑,或修改服务器上的任何代码?

不,除了通过代理之外,它没有任何访问服务器的权限。它根本看不到实际的远程对象实现。

或者查看字段的实际内容呢?

不,出于同样的原因。

于 2010-11-02T08:29:22.633 回答