阅读 Instant
类的源代码,我碰到了这个方法
/**
* Defend against malicious streams.
*
* @param s the stream to read
* @throws InvalidObjectException always
*/
private void readObject(ObjectInputStream s) throws InvalidObjectException {
throw new InvalidObjectException("Deserialization via serialization delegate");
}
描述让我很好奇。什么是“恶意流”?这种方法是如何防御的?
最佳答案
Instant
和其他 java.time
类使用包作用域委托(delegate) - java.time.Ser
进行序列化。查看 writeReplace
方法以了解如何创建委托(delegate)。
因此,调用 readObject
方法的唯一方法是有人传入恶意流(为尝试创建无效对象而创建的唯一目的)。该异常确保阻止此类恶意流。
一般来说,任何时候使用序列化委托(delegate)时,您都应该考虑像这样阻止 readObject
。
关于java - Instant.readObject 方法 "Defend[s] against malicious streams"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222571/