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

我正在编写一个使用java rmi(通过cajo项目)的客户机-服务器解决方案。
我想使服务器尽可能安全。我知道,通过使用Java反射,恶意客户端将能够查看任何给定的对象内的所有方法名称和字段名称,这些对象要么被绑定在RMI ReeGrices中,要么从服务器“代理”(在Cajo中,代理项目是实际驻留在服务器上的对象,但客户端可以引用它)。但是,恶意客户端是否能够查看任何程序逻辑或修改服务器上的任何代码?或者查看字段的实际内容呢?
请假定不允许对服务器进行物理访问,并且对服务器的唯一网络访问是通过CAJO TCP端口(1198)进行的。
谢谢

最佳答案

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

本文翻译自 https://stackoverflow.com/questions/4075846/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java reflection rmi cajo


相关文章:

java - HttpURLConnection产生大量进程?

java - 有人可以向我解释使用移位将两个变量相乘的代码吗? [重复]

c# - C#反射异常找不到方法

c# - 如何获取可空类型的字符串类型

java - Java RMI连接池详细信息

java - 序列化空值的大小

java - 春天在哪里可以捕获非休息控制器异常?

java - 在Java 8中将非值添加到Map的优雅方法?

c# - .NET反射的自动克隆可执行文件

java - 使用带有Swing组件的RMI代理,性能不佳