Filtros de deserialización
Restringe qué clases pueden ser deserializadas para prevenir ataques.
Comparación 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();
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Seguridad
Previene la deserialización de clases inesperadas o maliciosas.
Control granular
Controla profundidad, tamaño de arrays, referencias y patrones de clases.
A nivel de JVM
Establece un filtro global para toda la deserialización en la JVM.
Enfoque Antiguo
Aceptar todo
Enfoque Moderno
ObjectInputFilter
Desde JDK
9
Dificultad
Avanzado
Soporte JDK
Filtros de deserialización
Disponible
Ampliamente disponible desde JDK 9 (septiembre de 2017)
Cómo funciona
ObjectInputFilter permite crear listas de clases permitidas y denegadas, limitar la profundidad del grafo de objetos, el tamaño de arrays y el conteo de referencias. Esto defiende contra vulnerabilidades de deserialización sin necesidad de bibliotecas externas.
Documentación Relacionada