![見出し画像](https://assets.st-note.com/production/uploads/images/87536334/rectangle_large_type_2_c95d0bfe93fa0500ee7215803d125394.png?width=1200)
🚫シャローコピーからの情報漏洩の危険性 そのclone本当に安全か? cwe SECしらべ 危険コーディング
clone() メソッドは実装によっては浅いコピー(shallow copy)しか行わず、攻撃に悪用される恐れがある。また、clone() メソッドの実装が攻撃者によって提供されたものである可能性もある。
privateかつ可変なオブジェクトの内部状態は、ディフェンシブコピーを作成すること。不変データを含む可変フィールドは、浅いコピーで十分である。一般に、可変データを参照するフィールドは、深いコピーを作成する必要がある。
どちらかというと、クローン可能なオブジェクトのほうに留意せよというのが多かった
![](https://assets.st-note.com/img/1663986267154-9ORtt6BSFf.png?width=1200)
対策も簡単で、もう、そういうことやるな、ということらしい
クラスをクローン可能にする場合は、cloneメソッドをfinalにしてsuper.clone()を投げるようにしてください。
![](https://assets.st-note.com/img/1663986520524-4BIRghabVI.png?width=1200)
二つのクラスは super.clone() を呼び出さないことで発生するバグを示します。Kibitzer が clone() を実装しているため、 FancyKibitzer の clone メソッドは FancyKibitzer ではなく Kibitzer 型のオブジェクトを返します。
![](https://assets.st-note.com/img/1663987336840-cSd6Ab6824.png?width=1200)
![](https://assets.st-note.com/img/1663987653554-aXwKfVROUf.png?width=1200)
お願い致します