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

原文 标签 java reflection rmi cajo

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

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

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

谢谢

最佳答案

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

  • 代理对象:这些对象仅包含在接口中指定的方法,代理中不存在原始Object的所有其他方法和字段,并且不能通过反射进行访问。由于所有方法都已在接口中公开,因此无法进行攻击。
  • 序列化对象:是服务器端值的一对一副本,可以在客户端上访问所有方法和字段,但是对客户端副本的更改不会转发到服务器,因为这两个副本都是独立的。具有修改字段的对象仍可以用作RMI方法的参数,因此请验证服务器上的输入。
  • 相关文章:

    java - 何时在每个子类的表之上使用每个类的表层次结构?

    java - 根据两点匹配图像

    java - Java通过套接字发送屏幕截图

    java - Java:无安全管理器:RMI类加载器已禁用

    java - RMI Java | IP绑定问题和安全管理器问题

    java - Jar文件无法在tomcat Webapps中加载

    c# - 通过反射获取默认Guid的DefaultValue?

    reflection - 获取Go中接口的reflect.Type的更好方法

    go - 为什么golang reflect.MakeSlice返回不可寻址的值

    java - 通过SSL的RMI:握手失败