セキュアコーディングサイトが説明しているように:
Blockquote 以下の違反コード例は、プライベート コンストラクタを持つクラス Ser を示しており、クラスの外部のコードがそのインスタンスを作成できないことを示している。このクラスは java.io.Serializable を実装し、パブリックな readObject() および writeObject() メソッドを定義します。したがって、信頼できないコードは、readObject() を使用して再構成されたオブジェクトを取得し、writeObject() を使用してストリームに書き込むことができます。
public class Ser implements Serializable {
private final long serialVersionUID = 123456789;
private Ser() {
// initialize
}
public static void writeObject(final ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
}
public static void readObject(final ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
}
}
ご存じのように、writeObject および readObject メソッドはプライベートとして定義する必要があり (また static キーワードなしで!)、これらのメソッドは JVM によって呼び出されません。
私の質問は、これらの方法が安全でない理由です。これらのメソッドは JVM によって呼び出されることさえありません!! このコードが安全でない可能性があり、攻撃者がデータにアクセスできることを示すサンプル コードが必要です。
どんな助けでも大歓迎です。