JavaTM 2 Platform
Std. Ed. v1.3

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 Virtual Machine の停止 Virtual Machine を自動的に停止させることで、攻撃者はサービス妨害攻撃を展開することができる
shutdownHooks Virtual Machine のシャットダウンフックの登録と解除 悪意のあるシャットダウンフックを登録することで、攻撃者は Virtual Machine の正常なシャットダウンの妨害攻撃を展開することができる
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.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

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