界: Code Quality
代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。
Code Correctness: Non-Static Inner Class Implements Serializable
Abstract
实施
java.io.Serializable
的内部类可能会导致问题以及泄露外部类中的信息。Explanation
对内部类进行序列化会导致对外部类也执行序列化,因此,如果外部类是不可序列化的,则可能会造成信息泄露或出现运行时错误。此外,由于 Java 编译器创建了合成字段以便实施内部类,因此对内部类执行序列化会导致出现平台依赖,但是依据不同的实施方法和不同的编译器,出现的情况也会有所不同。
示例 1:以下代码允许对内部类执行序列化。
在
示例 1:以下代码允许对内部类执行序列化。
...
class User implements Serializable {
private int accessLevel;
class Registrator implements Serializable {
...
}
}
在
Example 1
中,对内部类 Registrator
执行序列化后,也会对外部类 User
的 accessLevel
字段执行序列化。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