Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器在网络上使用Java序列化是否存在安全漏洞?_Java_Security_Serialization - Fatal编程技术网

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

服务器在网络上使用Java序列化是否存在安全漏洞?,java,security,serialization,Java,Security,Serialization,我正在用服务器创建一个多人游戏,并使用序列化对象在服务器和客户端程序之间来回发送消息。以下是我的通信代码的MCVE: loop: while(true) try { Thread.yield(); Object raw = in.readObject(); NTask task = (NTask) raw; processRequest(task); } catch (IOException e){

我正在用服务器创建一个多人游戏,并使用序列化对象在服务器和客户端程序之间来回发送消息。以下是我的通信代码的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
是一组不同消息类型的超类,
processTask
根据类型决定如何处理每个对象


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

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

但是,用户可以做的是发送一个类的对象,该类服务器知道,但不尊重该类的不变量(例如,向您发送一个具有空名称的任务,尽管普通用户不应该这样做)


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

你说的任务名为空是什么意思?对于这个问题,我假设
NTask
s将清理它们的输入,因此任何
NTask
对象都是安全的。我担心的是在反序列化时可能运行代码的其他对象。让我们假设NTask有一个字段
name
,该字段不应为空。恶意用户可能会向您发送名称为空的NTask实例。