JavaTM Platform
Standard Ed. 6

java.lang
クラス RuntimePermission

java.lang.Object
  上位を拡張 java.security.Permission
      上位を拡張 java.security.BasicPermission
          上位を拡張 java.lang.RuntimePermission
すべての実装されたインタフェース:
Serializable, Guard

public final class RuntimePermission
extends BasicPermission

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

ターゲット名には、実行時アクセス権 (下を参照) の名前を指定します。命名規約は、階層型プロパティーの命名規約に従います。また、ターゲット名のあとにアスタリスクを指定し (「.」のあとに指定するか、単独で指定)、ワイルドカードによる照合を行うこともできます。次に例を示します。たとえば、「loadLibrary.*」や「*」は有効ですが、「*loadLibrary」や「a*b」は無効です。  

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

アクセス権ターゲット名 アクセス権により許可される機能 このアクセス権を許可した場合のリスク
createClassLoader クラスローダーの作成。 このアクセス権を与えるのは極めて危険です。悪意のあるアプリケーションが独自のクラスローダーのインスタンスを生成し、破壊行為を行うクラスをシステムにロードする可能性があります。この新たにロードされたクラスが同じクラスローダーによって保護ドメインに置かれ、ロードされたクラスに、そのドメインのアクセス権が自動的に与えられる可能性があります。
getClassLoader クラスローダー (呼び出し側クラスのクラスローダーなど) の取得。 これにより、特定のクラスのクラスローダーを取得するためのアクセス権を、攻撃者に与えることになります。あるクラスのクラスローダーにアクセスできると、攻撃者は、そのクラスローダーから使用できるほかのクラスをロードできるようになるため、このアクセス権は危険です。本来は、そのようなクラスにはアクセスすることはできません。
setContextClassLoader 特定のスレッドによって使用されるコンテキストクラスローダーの設定。 コンテキストクラスローダーは、システムクラスローダーに存在しない可能性のあるリソースを探す必要があるときに、システムコードおよびエクステンションによって使用されます。setContextClassLoader アクセス権を与えると、コードは、システムスレッドを含め、特定のスレッドで使用するコンテキストクラスローダーを変更できるようになります。
enableContextClassLoaderOverride スレッドのコンテキストクラスローダーメソッドのサブクラス実装 コンテキストクラスローダーは、システムクラスローダーに存在しない可能性のあるリソースを探す必要があるときに、システムコードおよびエクステンションによって使用されます。enableContextClassLoaderOverride アクセス権の許可によって、スレッドのサブクラスは、特定のスレッドのコンテキストクラスローダーの取得または設定に使用されるメソッドをオーバーライドできる
setSecurityManager セキュリティーマネージャーの設定 (既存のセキュリティーマネージャーの差し替えも含む)。 セキュリティーマネージャーとは、アプリケーションがセキュリティーポリシーを実装できるクラスです。setSecurityManager アクセス権を与えると、コードは、別のセキュリティーマネージャー (より制限の少ないセキュリティーマネージャーなど) をロードし、使用するセキュリティーマネージャーを変更できるようになります。この結果、元のセキュリティーマネージャーによって課されていたチェックを回避できるようになります。
createSecurityManager 新しいセキュリティーマネージャーの作成。 これにより、コードは、ほかのクラスまたは実行スタックに関する情報を開示してしまうような、保護された、慎重に取り扱われるべきメソッドにアクセスできるようになります。
getenv.{variable name} 指定された環境変数の値の読み取り。 コードを使って特定の環境変数の値の読み取りや存在の判定を行うことができる。変数が機密データを格納している場合、これは危険である
exitVM.{exit status} 指定された終了状態での Java 仮想マシンの停止。 攻撃者は、Java 仮想マシンを自動的に強制停止させるサービス妨害攻撃をしかけることができるようになります。注:アプリケーションクラスパスからロードされたすべてのコードにアクセス権「exitVM.*」が付与されるため、アプリケーションは自らを終了させることができます。また、アクセス権「exitVM」は「exitVM.*」と同等です。
shutdownHooks Java 仮想マシンのシャットダウンフックの登録および解除。 攻撃者は悪意のあるシャットダウンフックを登録し、Java 仮想マシンのクリーンなシャットダウンを変更できるようになります。
setFactory ServerSocket または Socket により使用されるソケットファクトリ、または URL により使用されるストリームハンドラファクトリの設定。 これにより、コードから、ソケット、サーバソケット、ストリームハンドラ、または RMI ソケットファクトリの実際の実装を設定できるようになります。攻撃者は、データストリームを狂わせる異常な実装を設定する可能性があります。
setIO System.out、System.in、および System.err の設定。 標準システムストリームの値を変更できるようになります。攻撃者は System.in を変更してユーザーの入力を監視および盗聴したり、System.err を「null」の OutputStream に設定して、System.err に送られたエラーメッセージがまったく表示されないようにすることができる
modifyThread Thread の interruptstopsuspendresumesetDaemonsetPrioritysetName、および setUncaughtExceptionHandler などのメソッドの呼び出しを使ったスレッドの変更 攻撃者は、システム内の任意のスレッドの動作を変更できる
stopThread Thread の stop メソッドの呼び出しによるスレッドの停止。 スレッドへのアクセス権をすでに取得している場合、コードから、システム内のどのスレッドでも停止できるようになります。実行中のスレッドが終了させられ、システムが破壊される可能性があります。
modifyThreadGroup ThreadGroup の destroygetParentresumesetDaemonsetMaxPrioritystop、および suspend などのメソッドの呼び出しを介してのスレッドグループの変更 攻撃者は、スレッドグループを作成し、その実行の優先順位を設定できるようになります。
getProtectionDomain 特定のクラスの ProtectionDomain の取得。 コードから、特定のコードソースのポリシー情報を取得できるようになります。ポリシー情報が盗まれてもシステムのセキュリティーが脅かされるわけではないが、攻撃の狙いをより正確に定めるためのローカルファイル名などの追加情報を攻撃者に与えてしまうことになります。
getFileSystemAttributes ファイルシステム属性の取得。 呼び出し側に使用可能なディスク使用量やディスク容量などのファイルシステム情報を、コードで取得できるようにします。これは、システムのハードウェア構成に関する情報と呼び出し側のファイルの書き込み特権に関する一部の情報を開示するため、危険を伴う可能性があります。
readFileDescriptor ファイル記述子の読み出し。 コードから、読み出したファイル記述子に関連付けられているファイルを読み出すことができるようになります。ファイルに機密データが含まれている場合、このアクセス権は危険です。
writeFileDescriptor ファイル記述子への書き込み。 コードから、そのファイル記述子に関連付けられているファイルに書き込めるようになります。悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険である
loadLibrary.{library name} 指定したライブラリの動的なリンク。 Java のセキュリティーアーキテクチャーは、ネイティブコードレベルでの悪意のある振る舞いを阻止することができず、そのようには設計されていません。このため、ネイティブコードライブラリのロード許可をアプレットに与えるのは危険です。
accessClassInPackage.{package name} クラスローダーがセキュリティーマネージャーの checkPackageAccess メソッドを呼び出したときに、クラスローダーの loadClass メソッドを介して、指定されたパッケージへアクセスを許可する 通常はアクセスできないパッケージ内のクラスに、コードからアクセスできるようになります。このため、悪意のあるコードが、このようなクラスを利用してシステムのセキュリティーを脅かす可能性があります。
defineClassInPackage.{package name} クラスローダーがセキュリティーマネージャーの checkPackageDefinition メソッドを呼び出すときに、そのクラスローダーの defineClass メソッドを使用して、指定したパッケージ内にクラスを定義する。 これにより、特定のパッケージ内にクラスを定義するためのアクセス権をコードに与えることになります。このアクセス権が与えられた悪意のあるコードは、java.securityjava.lang などの信頼できるパッケージ内に破壊行為を行うクラスを定義する可能性があるため、このアクセス権は危険です。
accessDeclaredMembers 特定のクラスで宣言されているメンバーへのアクセス。 特定のクラス内の public、デフォルト (パッケージ) アクセス、protected、および private なフィールドやメソッドに関する問い合わせを行うコードアクセス権をコードに与えることになります。このアクセス権が与えられたコードは、private および protected なフィールド名とメソッド名にはアクセスできるが、private および protected なフィールドのデータにはアクセスできないし、private なメソッドを呼び出すことはできません。しかし、攻撃の狙いをより正確に定めるため、悪意のあるコードがこの情報を利用する可能性があります。また、クラス内の public なメソッドを呼び出したり、public なフィールドにアクセスしたりする可能性があります。コードが、メソッドとフィールドが含まれるクラスやインタフェースにオブジェクトをキャストできないために、通常はコードがこれらのメソッドを呼び出したり、フィールドにアクセスしたりできない場合は危険です。
queuePrintJob 印刷ジョブ要求の発行。 機密情報が印刷される可能性があるほか、用紙が浪費される可能性があります。
getStackTrace 別のスレッドのスタックトレース情報の取得 別のスレッドのスタックトレース情報を取得できる。スレッドの実行を監視し、アプリケーションの脆弱性を発見する悪意のあるコードを可能にするので危険である
setDefaultUncaughtExceptionHandler キャッチされない例外により、突然スレッドが終了したときに使用されるデフォルトのハンドラを設定する 攻撃者は、スレッドの終了を妨害できる、悪意のあるキャッチされない例外ハンドラを登録できる
preferences java.util.prefs へのアクセスに必要なアクセス権を表す。 preferences 実装のユーザーまたはシステムルートは、preferences 持続バッキングストア内で取得または更新操作を実行できる このアクセス権により、コードを実行しているユーザーが必要な OS 特権を持っている場合、そのユーザーは preferences 持続バッキングストアに読み取りや書き込みを行うことができます。実際のバッキングストアは、従来のファイルシステムディレクトリか、プラットフォームの OS に依存するレジストリ内にあります。

関連項目:
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 の名前
例外:
NullPointerException - namenull の場合
IllegalArgumentException - name が空の場合

RuntimePermission

public RuntimePermission(String name,
                         String actions)
指定された名前を持つ新しい RuntimePermission オブジェクトを生成します。名前は RuntimePermission の記号名です。 String の actions は現在使用されず、null になります。

パラメータ:
name - RuntimePermission の名前
actions - null でなければならない
例外:
NullPointerException - namenull の場合
IllegalArgumentException - name が空の場合

JavaTM Platform
Standard Ed. 6

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

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。