SerialVesionUID不一致导致反序列化漏洞利用失败也算是实战中比较常见的问题了,面试也会经常提及。
反序列化的调用栈
initNonProxy:595, ObjectStreamClass (java.io)
readNonProxyDesc:1829, ObjectInputStream (java.io)
readClassDesc:1713, ObjectInputStream (java.io)
readOrdinaryObject:1986, ObjectInputStream (java.io)
readObject0:1535, ObjectInputStream (java.io)
readObject:422, ObjectInputStream (java.io)
main:18, SerializableDemo2 (serialVersionUID)
- java.io.ObjectStreamClass#initNonProxy
对serialVersionUID做了比较,如果发现不相等,则直接抛出异常。
- java.io.ObjectStreamClass#getSerialVersionUID
在没有定义serialVersionUID的时候,会调用computeDefaultSUID 方法,生成一个默认的serialVersionUID。