界: API Abuse

API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。

Code Correctness: Incorrect Serializable Method Signature

Abstract
在序列化方法上使用错误的方法签名可能导致永远不会调用该方法。
Explanation
代码正确性:当可序列化的类创建序列化或反序列化函数但未采用正确的签名时,会发生“可序列化的方法签名不正确”的问题:


private void writeObject(java.io.ObjectOutputStream out) throws IOException;
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
private void readObjectNoData() throws ObjectStreamException;


未使用序列化所要求的方法签名会导致在序列化/反序列化过程中永远不会调用该方法,这意味着将无法完成序列化/反序列化,或意味着不可信赖的代码可以获取对象的访问权限。
如果存在未抛出的异常,则可能意味着序列化/反序列化将失败并使应用程序崩溃,甚或可能悄然失败,以致构造的对象只是部分正确,从而导致出现极难调试的缺陷。调用程序应捕获这些异常,以便可以正确地处理错误的序列化/反序列化,而不会出现崩溃或部分构造的对象。
References
[1] SER01-J. Do not deviate from the proper signatures of serialization methods CERT
desc.structural.java.code_correctness_incorrect_serializable_method_signature