3

質問: Java プログラマーが配列を実装するためのメソッドを定義するときに、プライバシー リークがどのように発生する可能性があるかを説明してください。

私のクラスと私はこのアイデアをブレインストーミングし、次のオプションを思いつきました。

配列が給与額、雇用日などの従業員オブジェクトを保持していると仮定します。

  1. 配列が配列内のオブジェクトへの参照を保持しており、これらのオブジェクトのディープ コピーを保持していない場合、悪意のある個人がそれらのオブジェクトのコンテンツを変更するためにアクセスできます。
  2. オーバー フロー エラーが発生した場合、悪意のある個人が何らかのスタック (またはヒープ?) トレースを実行して、配列のオブジェクトに保持されている情報を取得できます。

しかし、私たちは正しい方向に進んでいるかどうか確信が持てません。助けていただければ幸いです。

4

1 に答える 1

3

最初の答えは正しいですが、2 番目の答えは間違っています。スタック トレース (およびそれを生成するために使用されるデータ構造) には実際のスタック フレームへのポインターが含まれていないため、例外は呼び出し元に配列の内容を明らかにしません。

3 番目のシナリオは、「攻撃者」が JVM プロセスのアドレス空間のコピーを取得できることを前提としています。たとえば、コア ダンプを強制したり、ページ ファイル/スワップ領域を読み取ったりします。そのシナリオでは、ガベージ コレクションされていない任意のオブジェクトの状態を把握できます。攻撃者が狙う可能性のあるものの 1 つは、パスワードやその他の機密テキスト情報を含む文字列のバッキング アレイです。これは、最も一般的に使用されている言語で Unicode テキスト文字のシーケンスのように見えるものを検索することにより、「力ずく」の方法で実行できます。


@sparkle にはポイントがありました。最初の回答では、攻撃者がコンテナーによって使用される配列への参照を保持できる場合、配列に関連するリークが発生します...コンテナー クラスがそれをコピーすることを怠ったためです。そもそも配列内のオブジェクトが攻撃者に知られていると仮定すると、ここでのセキュリティ侵害を防ぐために重要なのは、配列自体のコピーです。

注意すべきもう 1 つの点は、この場合、プライバシー漏洩を「可能にする」設計と実装が少し不自然であることです。

于 2012-10-13T10:02:03.047 に答える