scala中是否有一种方法可以使用RemoteActor在远程节点上执行任意
发布时间:2020-12-16 18:14:02 所属栏目:安全 来源:网络整理
导读:例如,我有一个受信任的客户端和一台服务器.客户端想要在服务器上执行任意代码.可以使用RemoteActor实现这一点(序列化一个函数并通过网络发送,反序列化并执行它)? 解决方法 不是现在.序列化函数意味着将其字段存储到对象输出流中并对其进行反序列化意味着从
例如,我有一个受信任的客户端和一台服务器.客户端想要在服务器上执行任意代码.可以使用RemoteActor实现这一点(序列化一个函数并通过网络发送,反序列化并执行它)?
解决方法
不是现在.序列化函数意味着将其字段存储到对象输出流中并对其进行反序列化意味着从其他位置的对象输入流中读取函数对象.反序列化假定从对象输入流中读取的对象的类是JVM已知的.记住 – 函数只是场景背后的对象.
在这种情况下,服务器不知道您正在序列化的函数对象的实际具体类,可能是它实现了Function接口.要支持这样的功能,您必须找到有问题的函数的类文件,将其发送到服务器,然后使用自定义classloader将其加载到服务器上.然后,如果对象具有任何类型的状态,则可以序列化客户端上的对象,通过网络发送它并在服务器上反序列化它.只有这样你才能运行它的方法.假设您的函数对象是无状态的(通常是这种情况),您可以跳过序列化/反序列化步骤. 编辑: 还要记住,函数可以在内部保存对其调用环境的引用.这意味着您最终可能会将函数对象的环境与其一起序列化,这可能是您的整个程序数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |