作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试实现安全的应用程序框架,作为避免反序列化之前拒绝服务攻击的一部分,我们希望了解有多少对象正在被反序列化,并在超过阈值时中止反序列化。
为了满足上述要求,谷歌搜索了一些论坛,并了解到有一些与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/
我是一名优秀的程序员,十分优秀!