如果一个类支持 Serializable
接口,并且它的 readObject()
和 writeObject()
方法未定义为总是抛出异常,那么就可以被序列化。 在供安全使用的代码中,可序列化的类可能比较危险。
示例:
class DeserializableClass implements Serializable { // 此类不包含抛出异常的 'writeObject()' 方法
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
}
在应用快速修复后:
class DeserializableClass implements Serializable {
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
throw new java.io.NotSerializableException("DeserializableClass");
}
}
使用以下选项配置检查:
Serializable
但不用于序列化的类。
请注意,与其忽略这些类,添加总是抛出异常的 readObject()
和 writeObject()
方法可能更安全。