gpt4 book ai didi

java - 如何在反序列化之前验证对象流的内容?

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

我们正在尝试实现安全的应用程序框架,作为避免反序列化之前拒绝服务攻击的一部分,我们希望了解有多少对象正在被反序列化,并在超过阈值时中止反序列化。

为了满足上述要求,谷歌搜索了一些论坛,并了解到有一些与java序列化相关的方法,即

resolveClass(ObjectStreamClass desc)
resolveObject(Object obj)

但是我没有得到有关这两种方法的任何文档或示例。有人可以发邮件给我或提供一些有关这些方法/自定义反序列化的简要信息

最佳答案

您要查找的两种方法都在 java.io.ObjectInputStream 类 ( link ) 中。 IBM 有一篇很好的文章解释了前瞻性 Java 反序列化 here 。基本上,您可以子类 java.io.ObjectInputStream 并重写 resolveClass() 方法来验证您要反序列化的类是您期望的类,如下所示:

public class LookAheadObjectInputStream extends ObjectInputStream {

public LookAheadObjectInputStream(InputStream inputStream)
throws IOException {
super(inputStream);
}

/**
* Only deserialize instances of our expected Bicycle class
*/
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
ClassNotFoundException {
if (!desc.getName().equals(Bicycle.class.getName())) {
throw new InvalidClassException(
"Unauthorized deserialization attempt",
desc.getName());
}
return super.resolveClass(desc);
}
}

关于java - 如何在反序列化之前验证对象流的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530173/

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