A class may be serialized if it supports the Serializable
interface,
and its readObject()
and writeObject()
methods are not defined to always
throw an exception. Serializable classes may be dangerous in code intended for secure use.
Example:
class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
}
After the quick-fix is applied:
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");
}
}
Use the following options to configure the inspection:
Serializable
from a superclass but are not intended for serialization.
Note that it still may be more secure to add readObject()
and writeObject()
methods
which always throw an exception, instead of ignoring those classes.