防止RMI服务器代码修改

时间:2010-11-02 08:03:27

标签: java reflection rmi cajo

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

  

我理解通过使用Java   反思,恶意客户会   能够查看所有方法名称和   任何给定对象内的字段名称   这已经受到RMI的约束   从服务器重新设置或“代理”

正确。但 那些字段是什么?只是一个IP地址:端口和被代理方法的一些幻数。没有什么可担心的,没有任何东西暴露出客户不能通过正常方式使用。

  

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

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

  

或者查看字段的实际内容怎么样?

不,出于同样的原因。