gpt4 book ai didi

java - 从ObjectInputStream读取对象时如何保证安全?

转载 作者:行者123 更新时间:2023-12-01 09:53:56 24 4
gpt4 key购买 nike

我尝试了以下实验(这只是伪代码):

class Server {
public static void main(final String args[]) {
final ServerSocket server = new ServerSocket(PORT);
final Socket client = server.accept();
final ObjectInputStream stream = new ObjectInputStream(client.getInputStream());
final Object object = stream.readObject();
// Can we hope that standard toString method will be called?
System.out.println(object.toString());
}
}

然后创建了一个恶意对象:

class MaliciousObject extends Object implements Serializable {
private static final long serialVersionUID = 1L;
@Override
public String toString() {
return "I am malicious object";
}
}

最后使用另一个程序将恶意对象的实例发送到服务器:

public static void main(final String args[]) {
final Socket socket = new Socket();
socket.connect(serversAddress, TIMEOUT);
final ObjectOutputStream stream = new ObjectOutputStream(socket.getOutputStream());
stream.writeObject(new MaliciousObject());
}

服务器打印到屏幕上的输出是

I am malicious object

因此,黑客似乎可以实现一个类扩展对象,重写任何方法 M 来执行一些恶意代码,然后通过网络发送该对象,希望服务器调用 M。

因此,我的问题是:如何防范这种情况?要是我们从 ObjectInputStream 读取对象,我们如何确定它们没有格式错误?

作为一个附带问题,在这种情况下,从 ObjectInputStream 读取对象时是否涉及 Java 类加载器?

最佳答案

So it seems that a hacker can implement a class extending object, override any method M to execute some malicious code, then send this object over the network in a hope that server will call M.

没有。该对象不包含代码。该类包含代码,并且该类未序列化。您已经拥有“被黑”的代码,因此在任何序列化之前您就已经遇到了问题。

my question is: how to defend against this? If we read objects from ObjectInputStream, how can we be sure that they're not malformed?

你不能,但只有当产生所示输出的编译代码已经存在于你的 CLASSPATH 中时,才会出现这种情况,因此你已经遇到了问题,序列化或没有序列化。请注意,序列化不会序列化类。

As a side question, is in this case Java class loader involved when reading objects from ObjectInputStream?

是的。

NB 伪代码不是一个实验,而是一个思想实验。我建议你在现实世界中尝试一下。

关于java - 从ObjectInputStream读取对象时如何保证安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37387703/

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