Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: readObject() Invokes Overridable Function
Abstract
O método
readObject()
na classe chama uma função que pode ser substituída.Explanation
Durante a desserialização,
Exemplo 1: A função
Como a função
readObject()
age como um construtor e, portanto, a inicialização do objeto só estará concluída quando essa função terminar. Portanto, quando uma função readObject()
de uma classe Serializable
chama uma função substituível, isso pode fornecer ao método de substituição o acesso necessário ao estado do objeto antes que ele seja totalmente inicializado.Exemplo 1: A função
readObject()
a seguir chama um método que pode ser substituído.
...
private void readObject(final ObjectInputStream ois) throws IOException, ClassNotFoundException {
checkStream(ois);
ois.defaultReadObject();
}
public void checkStream(ObjectInputStream stream){
...
}
Como a função
checkStream()
e sua classe delimitadora não são final
e públicas, isso implica que a função pode ser substituída, o que pode significar que um invasor pode substituir a função checkStream()
a fim de obter acesso ao objeto durante a desserialização.References
desc.structural.java.code_correctness_readobject_invokes_overridable_function