サンドボックスセキュリティメカニズムとネイティブ

サンドボックスセキュリティメカニズムとネイティブ

1.サンドボックスセキュリティメカニズム

Javaセキュリティモデルの中核はJavaサンドボックスです。サンドボックス
  とは何ですか?サンドボックスは、プログラムの実行を制限する環境です。サンドボックスメカニズムは、Javaコードを仮想マシン(JVM)の特定の動作範囲に制限し、コードの効果的な分離を保証し、コードへの損傷を防ぐような手段を通じて、ローカルシステムリソースへのコードのアクセスを厳密に制限することです。ローカルシステム。
  サンドボックスは主にシステムリソースへのアクセスを制限します。システムリソースとは何ですか?CPU、メモリ、ファイルシステム、およびネットワーク。サンドボックスのレベルが異なれば、これらのリソースへのアクセスに対する制限も異なります。
  すべてのJavaプログラムはサンドボックスで実行でき、セキュリティポリシーをカスタマイズできます。

  • Javaセキュリティモデルのコア
  • サンドボックス:プログラムのランタイム環境を制限します
  • ドメインの概念
  • Javaコードを仮想マシンの特定の動作範囲に制限し、ローカルシステムリソースへのコードのアクセスを厳密に制限します。この対策により、コードを効果的に分離し、ローカルシステムへの損傷を防ぎます。

サンドボックスを構成する基本的なコンポーネント

  • バイトコードベリファイア(バイトコードベリファイア)
    :JavaクラスファイルがJava言語仕様に従っていることを確認します。これは、Javaプログラムがメモリ保護を実現するのに役立ちます。ただし、コアクラスなど、すべてのクラスファイルがバイトコード検証を受けるわけではありません。
  • クラスローダー(クラスローダー):その中で、クラスローダーは3つの方法でJavaサンドボックスで役割を果たします

  • 悪意のあるコードが意図的なコードに干渉するのを防ぎます。

  • 信頼できるクラスライブラリの境界を保護します。
  • コードを保護ドメインに分類し、コードが実行できる操作を決定します。

仮想マシンは、異なるクラスローダーによってロードされたクラスに異なる名前空間を提供します。名前空間は一連の一意の名前で構成されます。ロードされた各クラスには名前が付けられます。この名前空間は、それぞれのJava仮想マシンによって提供されます。これらはクラスによって維持されます。ローダー、そしてそれらはお互いにさえ見えません。
  クラスローダーで使用されるメカニズムは、親の委任モデルです。
  1.最も内側のJVM自体のクラスローダーからロードを開始します。同じ名前の外側の悪意のあるクラスはロードできず、使用できません
  。2。アクセスドメインはパッケージによって厳密に区別されるため、外側の悪意のあるクラスは組み込みコード。内部クラスにアクセスするためのアクセス許可を取得すると、壊れたコードは当然有効になりません。

  • アクセスコントローラー:アクセスコントローラーは、オペレーティングシステムへのコアAPIのアクセス権限を制御でき、この制御のポリシー設定はユーザーが指定できます。

  • セキュリティマネージャー(セキュリティマネージャー):コアAPIとオペレーティングシステム間のメインインターフェイスです。アクセスコントローラよりも優先度の高い典拠コントロールを実現します。

  • セキュリティパッケージ(セキュリティパッケージ):
    java.securityの下のクラスと拡張パッケージの下のクラス。これにより、ユーザーは次のような新しいセキュリティ機能をアプリケーションに追加できます。

  • セキュリティプロバイダー

  • メッセージの概要

  • デジタル署名

  • 暗号化

  • 識別する

二、ネイティブ

  • 基礎となるc、c ++言語ライブラリを呼び出す
  • ネイティブ-> jni->ネイティブメソッドインターフェイス->ネイティブメソッドライブラリ
  • ネイティブメソッドスタック
  • 一般的にはあまり使用されませんが、ハードウェア開発に多く使用されます
  • native:nativeキーワードを含むものはすべて、javaのスコープが到達できないことを示しているため、戻って基になるC言語ライブラリを呼び出してください。
  • ローカルメソッドスタックに入ります
  • ローカルメソッドを呼び出すローカルインターフェイスJNI(Java Native Interface)
  • JNIの役割:Javaの使用を開放し、Java用のさまざまなプログラミング言語を統合すること!最初は:C、C ++
  • Javaが誕生したとき、CとC ++が横行していました。足がかりを得るには、CとC ++を呼び出すプログラムが必要です。
  • それは特別にメモリ領域にマークされた領域を開きました:ネイティブメソッドスタック、ネイティブメソッドを登録します
  • 最終的な実行では、JNIを介してローカルメソッドライブラリにメソッドをロードします
  • 例:Javaプログラムは、プリンター、管理システムを駆動し、それをマスターするだけで、エンタープライズレベルではあまり適用されません。
  • プライベートネイティブvoidstart0();
  • //他のインターフェースを呼び出す:Socket ... WebService〜 ... http〜

ここに画像の説明を挿入
Threadクラスのstartメソッドは次のとおりです。

public synchronized void start() {
    
    
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
    
    
            start0();
            started = true;
        } finally {
    
    
            try {
    
    
                if (!started) {
    
    
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
    
    
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }

    private native void start0();

実際には、Threadクラスには、宣言のみが実装されておらず、nativeキーワードを使用するメソッドがありますネイティブに関しては、このメソッドは言語レベルではなくシステムレベル(基盤となるオペレーティングシステムまたはサードパーティのC言語)であり、Javaはそれを操作できません。ネイティブメソッドは、ネイティブメソッドスタックにロードされます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43803285/article/details/115282317
おすすめ