目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
セキュリティを十分に確保しないでオブジェクトを直列化すると、悪意のあるユーザが、直列化バイトストリームにアクセスして機密データを読み込んだり、不正なまたは危険な状態のオブジェクトを作成したり、直列化復元されているオブジェクトの private フィールドへの参照を取得する可能性があります。セキュリティに関係する実装を行うときは、直列化するときに次の点を考慮する必要があります。
- デフォルトでは、オブジェクトを直列化すると、そのオブジェクトのフィールドが public であるかどうかにかかわらず、すべてのフィールドの値が直列化ストリームに書き込まれる。悪意のあるユーザは、オブジェクトが直列化可能な場合は、コードでオブジェクトの直列化およびそのバイトストリームの検査を行うことによって、その private フィールドの値を効果的に読み込むことができる。この問題を回避する方法については「A.4 機密データの直列化の防止」を参照
- 直列化復元を行うと、受信した直列化ストリームのデータを使用して、オブジェクトの作成および初期化が行われる。直列化復元を行う前にストリームが破損したり変更された場合は、直列化復元されたオブジェクトは予期しない状態または不正な状態になる。この問題を回避する方法については「A.5 クラス特有の直列化メソッドの作成」を参照
- 直列化バイトストリームにワイヤハンドル参照を追加すると、直列化復元しているときに、ストリーム内で以前に発生したオブジェクトに参照が追加されることがある。この結果、開発者は、直列化復元中に取得した private オブジェクトへの参照が、一意である保証がなくなる。この問題に対処する方法については、「A.6 非共有の直列化復元されたオブジェクトの保護」を参照
- Externalizable インタフェースを実装しているオブジェクトは、readExternal メソッドが public であるため、上書きされる可能性がある。呼び出し側は、任意の時点に
readExternal
メソッドを呼び出すことができる。 この場合、そのオブジェクトが任意のストリームに渡されて値が読み込まれるため、ターゲットオブジェクトが初期化し直される。この問題を回避する方法については、「A.7 外部化可能オブジェクトの上書きの防止」を参照