Filtros de serialización de Java

El mecanismo de filtrado de serialización de Java filtra los flujos entrantes de objetos serializados para ayudar a mejorar la seguridad y la solidez. Los filtros pueden validar las clases entrantes antes de que se deserialicen.

Como se indica en JEP 290 (Filtrar datos de serialización entrantes), los objetivos del mecanismo de filtrado de serialización de Java son:
  • Proporcione una forma de reducir las clases que se pueden deserializar a un conjunto de clases apropiado al contexto.
  • Proporcione métricas al filtro para el tamaño y la complejidad del gráfico durante la deserialización para validar los comportamientos normales del gráfico.
  • Permita que los objetos exportados por RMI validen las clases esperadas en las invocaciones.
Puede implementar filtros de serialización de las siguientes formas:
  • Los filtros basados ​​en patrones no requieren que modifique su aplicación. Consisten en una secuencia de patrones que se definen en propiedades, en un archivo de configuración o en la línea de comando. Los filtros basados ​​en patrones pueden aceptar o rechazar clases, paquetes o módulos específicos. Pueden establecer límites en el tamaño de la matriz, la profundidad del gráfico, las referencias totales y el tamaño de la secuencia. Un caso de uso típico es incluir en la lista negra las clases que se han identificado como potencialmente comprometidas con el tiempo de ejecución de Java. Los filtros basados ​​en patrones se definen para una aplicación o para todas las aplicaciones de un proceso.
  • Los filtros personalizados se implementan mediante la API ObjectInputFilter. Permiten que una aplicación integre un control más fino que los filtros basados ​​en patrones, porque pueden ser específicos para cada ObjectInputStream. Los filtros personalizados se establecen en un flujo de entrada individual o en todos los flujos de un proceso.
Se llama al mecanismo de filtro para cada nuevo objeto de la secuencia. Si existe más de un filtro activo (filtro de todo el proceso, filtro de aplicación o filtro específico de flujo), solo se llama al filtro más específico.

En la mayoría de los casos, un filtro personalizado debe verificar si se establece un filtro para todo el proceso. Si existe uno, el filtro personalizado debe invocarlo y usar el resultado del filtro de todo el proceso, a menos que el estado sea UNDECIDED.

El soporte para filtros de serialización se incluye a partir de JDK 9 y en las versiones de CPU de Java que comienzan con 8u121, 7u131 y 6u141.

Comentarios

Entradas populares