gpt4 book ai didi

java - 服务器通过网络使用Java序列化是否存在安全漏洞?

转载 作者:行者123 更新时间:2023-12-02 13:13:06 24 4
gpt4 key购买 nike

我正在使用服务器创建多人游戏,并使用序列化对象在服务器和客户端程序之间来回发送消息。这是我的通信代码的 MCVE:

loop: while(true)
try {
Thread.yield();
Object raw = in.readObject();
NTask task = (NTask) raw;
processRequest(task);
} catch (IOException e){
break loop;
} catch (ClassCastException e) {
throw new SecurityWarning("Client is sending erroneous messages. Possible security breach.", raw);
} catch (Throwable e) {
e.printStackTrace();
}

其中NTask是一堆不同消息类型的父类(super class),processTask根据类型决定如何处理每个对象。

我的问题是这是否会给我的服务器带来安全漏洞。有人可以编写自己的代码,向我的服务器发送一个会造成损害的对象,并让它在第 5 行抛出 ClassCastException 之前执行其恶意代码吗?

最佳答案

如果用户向服务器发送一个类的对象,而服务器的类路径中没有该类的对象,则服务器将无法加载此类,因此无法实例化收到的对象。

用户可以做的就是发送一个服务器知道的类的对象,但它不尊重该类的不变量(例如,向您发送一个名称为空的任务,尽管这种情况永远不会发生在普通用户)。

序列化对象基本上包括发送对象的类名及其状态(即其所有字段的值)。不发送类的字节码(即行为)。它是从本地类路径加载的。

关于java - 服务器通过网络使用Java序列化是否存在安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28252844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com