12

Java セキュリティに関するこの記事では、次のように述べています。

Java ライブラリ内のコードは、危険な操作が試行されようとしているときはいつでも Security Manager に問い合わせます。

では、これは正確には何を意味するのでしょうか。たとえば、独自の securitymanager を実装し、それを JVM 全体で有効にしたとします。さて、Java ランタイムは、すべての Java 呼び出し (System.out.println() など) ごとにセキュリティマネージャーに相談しdangerousますか、それとも System.exit() 、ファイル操作などの API 呼び出しについてのみ相談しますか?

編集:私の質問を明確にさせてください、

securitymanager の可能性を疑っているわけではありません。セキュリティ チェックが危険な API だけに対して行われるのか、それともすべてのメソッド呼び出しに対して行われるのかを尋ねているだけです。大量のコードを含むアプリケーションの場合、どの int がパフォーマンスの大幅な低下を引き起こしますか。

4

3 に答える 3

17

コードがそう言っている場合にのみ、SecurityManager を参照します。すべての操作でそれを行うわけではありません。

たとえば ではRuntime.exit、SecurityManager が参照されていることがわかります。

public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkExit(status);
}
Shutdown.exit(status);
}

同様に、 ではFile、ほとんどのメソッドが SecurityManager を参照することがわかります。例:

public boolean canWrite() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkWrite(path);
}
return fs.checkAccess(this, FileSystem.ACCESS_WRITE);
}

「危険」なメソッドを作成している場合は、SecurityManager も参照する必要があります。

于 2011-03-04T11:27:28.337 に答える
2

セキュリティ マネージャを使用すると、次へのアクセスを制御できます。

  1. ファイル操作
  2. 反省施設
  3. 読み取り/書き込み IO
  4. スレッド/スレッドグループの操作
  5. ソケット操作 (listen、accept など)
  6. 独自のクラスローダーを作成する力。

そのようなものごとに、SecurityManager に check*() メソッドがあります。

完全なリストについては、SecurityConstantsの定数を確認してください。

于 2011-03-04T11:24:26.270 に答える
0

セキュリティ マネージャは、ポリシー ファイルを使用して、何が許可され、何が許可されていないかを確認します。このポリシー ファイルによって決定される「危険な」操作は、実行中に許可または拒否されます。

Sun/Oracle JVM のデフォルト ポリシーの詳細については、次を参照してください。

http://download.oracle.com/javase/6/docs/technotes/guides/security/PolicyFiles.html

于 2011-03-04T11:24:16.100 に答える