Início‎ > ‎

Usar classes não desserializáveis

Mesmo que sejam implementadas as recomendações do item “Usar classes não serializáveis”, a classe ainda pode ser desserializável, o que permitiria que um adversário crie uma seqüência de bytes que corresponda a uma instância de sua classe. Isto pode ser perigoso pois o objeto desserializado pode estar num estado inconsistente ou num estado que esteja em desacordo com seu invariante (o conjunto de regras, explícitas ou não, que define os possíveis estados que o objeto pode assumir). Pode-se imaginar a desserialização como um construtor público para a sua classe, só que é um construtor que não permite o controle dos valores atribuídos às variáveis.

É possível prevenir, tornando a classe impossível de desserializar uma seqüência de bytes em uma instância da sua classe. Isto pode ser feito pela definição de um método de desserialização conforme mostrado abaixo. Este método é declarado como final para evitar que seja redefinido em uma subclasse, conforme o item “Tornar todos os métodos e classes “final””.

private final void readObject(ObjectInputStream in)
throws java.io.IOException {
        throw new java.io.IOException("Class cannot be deserialized");
}

Comments