アプレットを実行するときのセキュリティレベルの設定方法を説明します。
Java2では、セキュリティ設定用に新たにポリシーファイルと呼ばれる設定ファイルが導入されました。ポリシーファイルとは、アプレットごとにセキュリティチェックの対象となる各操作を許可するかを設定するためのファイルです。ポリシーファイルを使用することで、Java SEは1.1系のJava VMよりも自由なセキュリティ設定ができるようになっています。
Java SEを使用する場合には、JBKプラグインのセキュリティ設定もポリシーファイルの設定内容に従います。JBKプラグインが使用するポリシーファイルの詳細は以下の説明を参照してください。なお、ポリシーファイルによるセキュリティ設定の詳細は、JDKのドキュメントを参照してください。
JBKプラグインが使用するポリシーファイル
JBKプラグインは、以下の2種類のポリシーファイルを使用します。
JBKプラグインのポリシーファイル
JBKプラグインのポリシーファイルの格納場所は、jbkplugin.propertiesの中の以下の行に記述されています。
bk.plugin.policy.url=<ポリシーファイルの格納場所を表すURL> |
<ポリシーファイルの格納場所を表すURL>には、ポリシーファイルの絶対パスをURL形式で指定します。デフォルト状態の設定は以下のようになっています。
file:${jbk.home}/classes/jbkplugin.policy
JBKのインストールフォルダにある“classes”フォルダの“jbkplugin.policy”ファイルを表します(${jbk.home}は、JBKのインストールフォルダを表すプロパティです)。
JBKのインストールフォルダが空白を含む場合、jbk.plugin.policy.urlに${jbk.home}を使用しないでください。ポリシーファイルの読み込みに失敗します。
Java SEのデフォルトのポリシーファイル
Java SEには、以下の場所にデフォルトのポリシーファイルが用意されています。
JDK:(JDKのインストールフォルダ)\jre\lib\security\java.policy
JRE:(JREのインストールフォルダ)\lib\security\java.policy
共通:(${user.home})\.policy
JBKプラグインによるアプレット実行の際には、これらのポリシーファイルの設定が両方とも有効になります。同じアプレットに対する権限設定が両方のポリシーファイルに記述されている場合には、両方の権限が許可されます。
アプレットの権限の設定はどちらのポリシーファイルに記述してもかまいません。JBKプラグインのポリシーファイルに記述すると、使用するJava SEを切り替えた場合やJava SEを再インストールした場合にも、デフォルトのポリシーファイルに設定を記述し直すことなく常に同じ設定が使用できるようになります。
例
ポリシーファイルの記述例
以下は、あるアプレットにすべての権限を許可したい場合のポリシーファイルの記述例です。
grant codeBase "(アプレットのコードベースを表すURL)" { //AllPermissionは、すべての権限を表すパーミッション permission java.security.AllPermission; }; |
この記述例のAllPermissionは、すべての権限をアプレットに許可するため、注意が必要です。実際の運用時では、AllPermissionの代わりに必要な権限だけを記述するようにします。
ポイント
JBKプラグインが独自のポリシーファイルを使用するのを止めたい場合には、jbkplugin.properties内のポリシーファイルの格納場所の指定行(“jbk.plugin.policy.url”が記述されている行を削除するか、行の先頭に'#'を挿入してコメント行にしてください。
各操作に必要な権限
セキュリティチェックの対象となる各操作を行うために必要な権限を、下表に示します。これらの権限の詳細およびポリシーファイルへの設定方法は、JDKのドキュメントを参照してください。
対象となる操作 | 必要な権限 |
---|---|
ローカルのファイルの読込み | (ファイル記述子による読込み) |
(ファイル名による読込み) | |
ローカルのファイルへの書込み | (ファイル記述子による書込み) |
(ファイル名による書込み) | |
ローカルのファイルの削除 | java.io.FilePermission "{file}","delete"; |
ネットワーク接続の要求(connect) | (ポート番号が-1の場合) |
(それ以外の場合) | |
ネットワークポートでの待機(listen) | (ポート番号が0の場合) |
(それ以外の場合) | |
ネットワーク接続要求の受理(accept) | java.net.SocketPermission "{host}:{port}","accept"; |
マルチキャストの使用 | java.net.SocketPermission(maddr.getHostAddress(),"accept,connect"); |
ネットワーク関連クラスのファクトリの設定 | java.lang.RuntimePermission "setFactory"; |
他のスレッドグループのスレッドの操作 | (スレッドの操作) |
(スレッドグループの操作) | |
ローカルのアプリケーションの起動 | (アプリケーションの起動コマンドが絶対パスで指定されている場合) |
(相対パスで指定されている場合) | |
ローカルのライブラリ(DLL)のロード | java.lang.RuntimePermission "loadLibrary.{lib}"; |
システムプロパティへのアクセス | (System.getProperties()を使用する場合) |
(System.getProperty(String key)を使用する場合) | |
ウィンドウの作成 | java.awt.AWTPermission "showWindowWithoutWarningBanner"; |
アプレットからのクラスのロード | java.lang.RuntimePermission "getClassLoader"; |
印刷ジョブへのアクセス | java.lang.RuntimePermission "queuePrintJob"; |
クリップボードへのアクセス | java.awt.AWTPermission "accessClipboard"; |
AWTのイベントキューへのアクセス | java.awt.AWTPermission "accessEventQueue"; |
クラスローダの操作 | java.lang.RuntimePermission "getClassLoader"; |
ブラウザの終了 | ※JBKプラグインでは、アプレットがブラウザを終了させることを許可していません。 |
注意
V3.0L20以前のJBKプラグインから移行する場合
JBKプラグインはV3.0L20でセキュリティチェック機能の強化を行っています。従来のJBKプラグインでも実運用上の問題はありませんが、V3.0L20からJBKプラグインはさらに厳密なセキュリティチェックを行うようにしています。ただし、このために以下のような現象が発生することがあります。
アプレットからプロキシ経由でURL接続を行う際、そのURLのホストがDNS登録されていない場合に、接続までに数分かかる場合がある。
このような現象が実運用で問題になる場合には、jbkplugin.propertiesに“jbk.plugin.security.strict=false”と記述して、セキュリティチェック機能の強化を解除してください。この設定を行うと、JBKプラグインは従来どおりのセキュリティチェックを行います。
また、セキュリティチェック機能の強化により、従来アプレットから他ホスト(アプレットをダウンロードしたホスト以外)にネットワーク接続できていたものがセキュリティエラーとなる場合があります。このような場合には、ポリシーファイルを用いて、そのアプレットに“java.net.SocketPermission”などネットワーク接続を行うための適切な権限を設定してください。