3

Java Security を読んでいるときに、以下の文に出くわしましたが、インターネット上で満足のいく説明を得ることができませんでした。誰か説明してくれませんか

  • バイトコードを含むクラスのロードを防ぎます
  • 不正なパッケージでのロードを防止
4

3 に答える 3

3

ただし、クラス自体が安全であることを確認することはできません。クラスがネットワークやローカル ハードディスクなどの保護されたリソースにアクセスするのを防ぐ SecurityManager のセーフティ ネットはまだありますが、それだけでは十分ではありません。クラスに不正なバイトコードが含まれている、保護されたメモリへのポインタが偽造されている、プログラム スタックがオーバーフローまたはアンダーフローしている、またはその他の方法で JVM の整合性が損なわれている可能性があります。[1]のトピックThe Class File Verifierを確認してください: http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm

于 2009-11-17T06:47:18.827 に答える
2

バイトコードベリファイアは、次のチェックを行います。

  • 分岐は、メソッドのコード配列の境界内にある必要があります。
  • すべての制御フロー命令のターゲットは、それぞれ命令の開始です。ワイド命令の場合、ワイド オペコードは命令の開始と見なされ、そのワイド命令によって変更された操作を与えるオペコードは、命令の開始とは見なされません。命令の途中への分岐は許可されていません。
  • 命令は、そのメソッドが割り当てることを示すローカル変数の数以上のインデックスにあるローカル変数にアクセスしたり、変更したりすることはできません。
  • 定数プールへのすべての参照は、適切なタイプのエントリである必要があります。たとえば、命令 ldc は、int または float 型のデータ、またはクラス String のインスタンスに対してのみ使用できます。命令 getfield はフィールドを参照する必要があります。
  • コードは命令の途中で終了しません。
  • 実行がコードの最後から外れることはありません。
  • 例外ハンドラごとに、ハンドラによって保護されるコードの開始点と終了点は、命令の先頭にある必要があります。終了点の場合は、コードの末尾の直後にある必要があります。始点は終点より前でなければなりません。- 例外ハンドラ コードは有効な命令で開始する必要があり、ワイド命令によって変更されるオペコードで開始することはできません。
于 2009-11-17T07:27:13.333 に答える
0

ソースコードはバイトコードにコンパイルされ、ユーザーに配布されます。バイトコードが破損している場合、または Java コンパイラによって作成されたものではない場合、不正である可能性があり、バイトが意味をなさないことを意味します。

于 2009-11-17T06:36:59.933 に答える