5

次の攻撃とは何か、またJavaがこれらの攻撃を不可能にする方法を理解するのに誰か助けてください:

  1. ルーチン スタックのオーバーラン - ワームやウイルスによる一般的な攻撃
  2. 自身のプロセス空間外のメモリを破壊する
  3. 許可なくファイルを読み書きすること。

私はc / c ++に精通しており、Javaから始めているので、これらを理解するのを手伝ってください.

4

3 に答える 3

5

第一に、セキュリティの問題は、言語というよりは実装の問題です。Java は、C++ ではオプションの (そして実行時に非常に高価な) いくつかのセキュリティ チェック (境界チェックなど) を課します。あなたの特定の問題に関して:

  1. これは、C でしばしば問題となった従来のバッファ オーバーランの問題を指していると思われます。C++ では、std::vectorJava と同じチェックを行うことができる (通常は、少なくとも正しいコンパイラ オプションが指定されている場合は行います) を使用します。一方、それがスタック オーバーフローを参照している場合 (たとえば、深すぎる再帰の結果として)、JVM のスタックはマシン スタックではないため、Java は追加のチェックを行うことができ、メモリ不足を保証することもできます。スタック オーバーフローの場合の例外。(これは C++ でも可能ですが、それを行うコンパイラを知りません。また、オペレーティング システムが常にそれほど簡単であるとは限りません。)

  2. これは OS の問題であり、言語の問題ではありません。最新の OS では、プログラムが独自のプロセス空間外のメモリにアクセスすることを許可していないため、Java も C++ も許可していません。

  3. 上記のように、これは言語の問題ではなく OS の問題であり、最新の OS では、プログラムが Java で記述されているか C++ で記述されているかに関係なく、比較的適切に適用されます。

要約すると、言語に関係なく、2 と 3 の両方が不可能であり、1 は適切に記述された C++ では発生しません (ただし、C では過去に問題がありました)。

于 2012-12-12T10:08:36.047 に答える