계: Code Quality

코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.

Code Correctness: Non-Static Inner Class Implements Serializable

Abstract
java.io.Serializable을 구현하는 inner class를 사용하면 outer class에서 문제가 발생하고 정보가 누출될 수 있습니다.
Explanation
inner class의 serialization을 수행하면 outer class도 serialization될 수 있어 정보가 누출될 수 있으며, outer class가 serializable이 아닌 경우에는 런타임 오류가 발생할 수 있습니다. 뿐만 아니라 inner class를 serialize하면 플랫폼 dependency가 발생할 수 있습니다. Java 컴파일러는 inner class를 구현하기 위해 가상 필드를 만드는데, 이러한 필드는 구현에 따라 다르며 컴파일러별로도 다를 수 있기 때문입니다.

예제 1: 다음 코드는 inner class의 serialization을 허용합니다.


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

Example 1에서 inner class Registrator를 serialize하면 outer class UseraccessLevel 필드도 serialize됩니다.
References
[1] SER05-J. Do not serialize instances of inner classes CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.code_correctness_non_static_inner_class_implements_serializable