JavaTM 2
Platform
Std. Ed. v1.4.0

java.lang
クラス RuntimePermission

java.lang.Object
  |
  +--java.security.Permission
        |
        +--java.security.BasicPermission
              |
              +--java.lang.RuntimePermission
すべての実装インタフェース:
Guard, Serializable

public final class RuntimePermission
extends BasicPermission

このクラスは、実行時のアクセス権に関連します。RuntimePermission は、ターゲット名とも呼ばれる名前を格納しますが、アクションリストは格納しません。名前の付いたアクセス権 (名前付きアクセス権) は持っても持たなくてもかまいません。

ターゲット名は、実行時アクセス権の名前です (以降の説明を参照)。命名規則は、階層的プロパティ命名規則に従います。また、名前の末尾に「.*」または「*」がある場合は、ワイルドカードマッチングを表します。たとえば、「loadLibrary.*」や 「*」は有効なターゲット名ですが、「*loadLibrary」や「a*b」は無効です。

次の表に、使用可能な RuntimePermission ターゲット名を一覧にまとめ、それぞれについて、許可するアクセス権と、コードに許可することによって生じるリスクを示します。

アクセス権ターゲット名 アクセス権により許可される機能 このアクセス権を許可した場合のリスク
createClassLoader クラスローダの作成 このアクセス権を許可することはきわめて危険である。独自のクラスローダのインスタンスを生成できる悪意のあるアプリケーションであれば、悪意のあるクラスをシステムにロードできるようになる。この場合、新しくロードされた悪意のあるクラスを、クラスローダを使って任意の保護ドメインに配置できる。つまり、保護ドメインへのアクセス権を、悪意のあるクラスに対して自動的に許可することになる
getClassLoader クラスローダ (クラスを呼び出すためのクラスローダなど) の取得 特定のクラスのクラスローダへのアクセス権を、攻撃者に与えるおそれがある。クラスのクラスローダへのアクセスができれば、攻撃者はそのクラスローダでアクセスできるほかのクラスもロードできるので、危険である。クラスのクラスローダへのアクセスができなければ、通常、攻撃者はこれらのクラスにアクセスできない
setContextClassLoader スレッドが使うコンテキストクラスローダの設定 コンテキストクラスローダは、システムクラスローダには存在しない可能性のあるリソースを探す必要があるときに、システムコードおよび拡張機能が使用する。setContextClassLoader アクセス権の許可によって、コードは、システムスレッドを含む特定のスレッドに使用するコンテキストクラスローダを変更できるようになる
setSecurityManager セキュリティマネージャの設定 (既存の設定を置き換える可能性あり) セキュリティマネージャは、アプリケーションでセキュリティポリシーを実装できるようにするクラスである。setSecurityManager アクセス権の許可によって、コードは、より制限の少ないほかのセキュリティマネージャをインストールすることによって、使用されるセキュリティマネージャを変更できる。その結果、元のセキュリティマネージャなら実行されたはずのセキュリティチェックを省略できる
createSecurityManager 新しいセキュリティマネージャの作成 他のクラスまたは実行スタックの情報を公開する可能性がある、保護された、機密性の高いメソッドへのアクセスをコードに与える
exitVM Java 仮想マシンの停止 仮想マシンを自動的に停止させることで、攻撃者はサービス妨害攻撃を展開することができる。注: アプリケーションクラスパスからロードされたすべてのコードにアクセス権 exitVM が付与されるため、アプリケーションは自らを終了させることができる
shutdownHooks 仮想マシンのシャットダウンフックの登録と解除 悪意のあるシャットダウンフックを登録することで、攻撃者は仮想マシンの正常なシャットダウンの妨害攻撃を展開することができる
setFactory ServerSocket または Socket が使うソケットファクトリ、あるいは URL が使うストリームハンドラファクトリの設定 ソケット、サーバソケット、ストリームハンドラ、あるいは RMI ソケットファクトリが使う実際の実装をコードで設定できるようにする。攻撃者は、データストリームを混乱させる不完全な実装を設定できる
setIO System.out、System.in、および System.err の設定 標準のシステムストリームの値を変更できるようにする。攻撃者は System.in を変更してユーザの入力を監視および盗聴したり、System.err を「null」の OutputSteam に設定して、System.err に送られたエラーメッセージがまったく表示されないようにすることができる
modifyThread Thread の stopsuspendresumesetPriority、および setName などのメソッドの呼び出しを介してのスレッドの変更 攻撃者は、システム内の任意のスレッドを開始または停止できる
stopThread Thread の stop メソッドの呼び出しを介してのスレッドの停止 コードは、すでにスレッドへのアクセス権を与えられている場合は、システム内の任意のスレッドを停止できる。コードを使って既存のスレッドを強制終了することでシステムを破壊できるため、これは脅威になる
modifyThreadGroup ThreadGroup の destroygetParentresumesetDaemonsetMaxPrioritystop、および suspend などのメソッドの呼び出しを介してのスレッドグループの変更 攻撃者は、スレッドグループを作成してその実行優先順位を設定できる
getProtectionDomain クラスの ProtectionDomain の取得 特定のコードソースのポリシー情報を、コードで取得できる。ポリシー情報を取得されてもシステムのセキュリティは損なわれないが、これにより、攻撃者はローカルファイル名などの付加情報を取得でき、攻撃の的は絞りやすくなる
readFileDescriptor ファイル記述子の読み込み ファイル記述子 read に関連した特定のファイルを、コードを使って読み取ることができる。ファイルが機密データを格納している場合、これは危険である
writeFileDescriptor ファイル記述子への書き込み この記述子に関連した特定のファイルに、コードを使って書き込みができる。悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険である
loadLibrary.{library name} 特定のライブラリへの動的リンク Java のセキュリティアーキテクチャが、ネイティブコードのレベルで悪意のある動作を防止するようには設計されていないため、ネイティブコードライブラリをロードするアクセス権をアプレットに与えるのは危険である
accessClassInPackage.{package name} クラスローダがセキュリティマネージャの checkPackageAcesss メソッドを呼び出したときに、クラスローダの loadClass メソッドを介して、指定されたパッケージへアクセスを許可する パッケージ内の、通常ならアクセスできないクラスにコードでアクセスできる。悪意のあるコードによって、システムのセキュリティを損なうためにこれらのクラスが利用される可能性がある
defineClassInPackage.{package name} クラスローダがセキュリティマネージャの checkPackageDefinition メソッドを呼び出したときに、クラスローダの defineClass メソッドを介して、指定されたパッケージ内のクラスを定義する 特定のパッケージ内のクラスを定義するためのアクセス権をコードに対して許可する。このアクセス権を持つ悪意のあるコードに対して、java.securityjava.lang などの信頼できるパッケージ内に、悪意のあるクラスを定義することを許可するので危険である
accessDeclaredMembers クラスの宣言されたメンバへのアクセス public、protected、default (package) への各アクセスに利用するクラス、および private フィールドまたは private メソッド (あるいは両方) を照会するためのアクセス権をコードに許可する。コードは、private と protected の各フィールド名および各メソッド名にアクセスできるが、public および protected の各フィールドデータにはアクセスできず、任意の private メソッドの呼び出しもできない。しかし悪意のあるコードはこの情報を使って、攻撃の的を絞ることができる。さらに、コードはクラスの任意の public メソッドまたは public フィールド (あるいは両方) を呼び出すことができる。これは、このコードが、通常はこれらのメソッドの呼び出しやフィールドへのアクセスができない場合は、これらのメソッドおよびフィールドを使っても、コードはオブジェクトをクラスまたはインタフェースにキャストできないため、危険である
queuePrintJob 印刷ジョブ要求の初期化 機密情報を印刷してしまうか、用紙の無駄になる

関連項目:
BasicPermission, Permission, Permissions, PermissionCollection, SecurityManager, 直列化された形式

コンストラクタの概要
RuntimePermission(String name)
          指定された名前で、新しい RuntimePermission を生成します。
RuntimePermission(String name, String actions)
          指定された名前で、新しい RuntimePermission オブジェクトを作成します。
 
クラス java.security.BasicPermission から継承したメソッド
equals, getActions, hashCode, implies, newPermissionCollection
 
クラス java.security.Permission から継承したメソッド
checkGuard, getName, toString
 
クラス java.lang.Object から継承したメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

RuntimePermission

public RuntimePermission(String name)
指定された名前で、新しい RuntimePermission を生成します。名前は RuntimePermission の記号名で、たとえば「exit」、「setFactory」などを指定します。名前の末尾に「.*」または「*」を付けて、ワイルドカードマッチングを表します。

パラメータ:
name - RuntimePermission の名前

RuntimePermission

public RuntimePermission(String name,
                         String actions)
指定された名前で、新しい RuntimePermission オブジェクトを作成します。名前は RuntimePermission の記号名で、String の actions は現在は使用しないので null にします。このコンストラクタが存在するのは、Policy オブジェクトが新しい Permission オブジェクトのインスタンスの生成に利用するためです。

パラメータ:
name - RuntimePermission の名前
actions - null でなければならない

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.