Filtros de desserialização
Restrinja quais classes podem ser desserializadas para prevenir ataques.
Comparação de Código
✕ Java 8
// Dangerous: accepts any class
ObjectInputStream ois =
new ObjectInputStream(input);
Object obj = ois.readObject();
// deserialization attacks possible!
✓ Java 9+
ObjectInputFilter filter =
ObjectInputFilter.Config
.createFilter(
"com.myapp.*;!*"
);
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Segurança
Previne a desserialização de classes inesperadas ou maliciosas.
Controle refinado
Controle de profundidade, tamanho de arrays, referências e padrões de classes.
Abrangência na JVM
Defina um filtro global para toda desserialização na JVM.
Abordagem Antiga
Aceitar tudo
Abordagem Moderna
ObjectInputFilter
Desde o JDK
9
Dificuldade
Avançado
Suporte JDK
Filtros de desserialização
Disponível
Amplamente disponível desde o JDK 9 (setembro de 2017)
Como funciona
ObjectInputFilter permite criar listas de permissão/bloqueio de classes, limitar a profundidade do grafo de objetos, tamanhos de arrays e contagem de referências. Isso protege contra vulnerabilidades de desserialização sem bibliotecas externas.
Documentação Relacionada