Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Code Correctness: Non-Static Inner Class Implements Serializable

Abstract
Cuando las clases internas implementan java.io.Serializable pueden ocasionar problemas y filtrar información de la clase externa.
Explanation
La serialización de las clases internas supone la serialización de la clase externa y puede que se filtre información o se produzca un error en el tiempo de ejecución si no es posible serializar la clase externa. Además, la serialización de las clases internas puede causar dependencias de la plataforma, ya que el compilador Java crea campos sintéticos para implementar las clases internas, pero dichos campos dependen de la implementación y varían en función del compilador.

Ejemplo 1: el siguiente código permite la serialización de una clase interna.


...
class User implements Serializable {
private int accessLevel;
class Registrator implements Serializable {
...
}
}



En el Example 1, cuando se serializa la clase interna Registrator, también se serializa el campo accessLevel de la clase externa User.
References
[1] SER05-J. Do not serialize instances of inner classes CERT
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.code_correctness_non_static_inner_class_implements_serializable