モジュール java.base
パッケージ java.security

クラスSecurityPermission

  • すべての実装されたインタフェース:
    Serializable, Guard


    public final class SecurityPermission
    extends BasicPermission
    このクラスはセキュリティ・アクセス権のために用意されています。 SecurityPermissionには名前(ターゲット名とも呼ばれる)は含まれますが、アクション・リストは含まれません。したがって、名前付きアクセス権を得るか、アクセス権を得ないかのどちらかになります。

    ターゲット名には、セキュリティ構成パラメータの名前(下記を参照)を指定します。 現在、SecurityPermissionオブジェクトは、AccessControlContextPolicyProviderSecuritySigner、およびIdentityオブジェクトへのアクセスを保護するために使用されます。

    次の表に、標準のSecurityPermissionターゲット名を示します。それぞれには、許可が許可する内容とコードに許可を与えるリスクの説明が記載されています。

    ターゲット名、許可が許可するもの、および関連するリスク
    アクセス権ターゲット名 アクセス権により許可される操作 このアクセス権を許可した場合のリスク
    authProvider.{provider name} 指定されたプロバイダをログインおよびログアウト操作のためのAuthProviderにします。 これにより、指定されたプロバイダはログイン操作とログアウト操作を実行できます。 指定されたプロバイダはAuthProviderを拡張する必要があり、ログイン操作にはPINやパスワードなどの機密性の高い認証情報が関与するため、信頼できるプロバイダに付与するように注意する必要があります。
    createAccessControlContext AccessControlContextの作成 このアクセス権はDomainCombinerを使用してAccessControlContextをインスタンス化する。 このアクセス権を付与するときは、十分な注意を払う必要があります。 悪意のあるコードは、コードに与えるアクセス権のセットを拡張したり、コードAllPermissionさえも付与したりするDomainCombinerを作成する可能性があります。
    getDomainCombiner AccessControlContextのDomainCombinerを取得。 このアクセス権はAccessControlContextのDomainCombinerを取得する。 DomainCombinerには重要な情報があるので、プライバシの漏洩につながる可能性があります。
    getPolicy システム全体のセキュリティ・ポリシー(具体的には、現在インストールされているPolicyオブジェクト)の取得。 特定のCodeSourceに対してどのようなアクセス権が与えられているかを知ることができるgetPermissionsの呼出しにより、システム全体のセキュリティ・ポリシーに対して問い合わせができるようになります。 ポリシー情報が盗まれてもシステムのセキュリティが脅かされるわけではありませんが、攻撃の狙いをより正確に定めるための追加情報を悪意のあるコードに与えてしまいます。 必要以上の情報は公開しないようにする必要があります。
    setPolicy システム全体のセキュリティ・ポリシー(具体的には、Policyオブジェクト)の設定。 このアクセス権を与えると、悪意のあるコードは、システムを攻撃するのに必要なアクセス権のすべてを自らに与えることができるようになるため、極めて危険です。
    createPolicy.{policy type} プロバイダからPolicy実装のインスタンスを取得。 このアクセス権を付与すると、コードはPolicyオブジェクトを取得できるようになります。 悪意のあるコードが、Policyオブジェクトを照会することにより、自分以外のコードに付与されているアクセス権を特定しようとする場合があります。
    getProperty.{key} 鍵を指定してのセキュリティ・プロパティの取得。 指定した鍵により可能になるアクセスの種類によっては、コードから、システム全体のポリシーとユーザー・セキュリティ・ポリシーの場所のほか、セキュリティ・プロバイダのリストにもアクセスできるようになります。この情報が盗まれてもシステムのセキュリティが脅かされるわけではありませんが、攻撃の狙いをより正確に定めるための追加情報を悪意のあるコードに与えてしまいます。
    setProperty.{key} 鍵を指定してのセキュリティ・プロパティの設定。 これには、セキュリティ・プロバイダの設定と、システム全体のセキュリティ・ポリシーの場所の定義が含まれます。 新しいセキュリティ・プロバイダを設定するアクセス権が与えられた悪意のあるコードは、暗号化非公開鍵などの機密情報を盗むプロバイダを設定する可能性があります。 また、システム全体のセキュリティ・ポリシーの場所を設定するアクセス権が与えられた悪意のあるコードは、システムを攻撃するのに必要なアクセス権のすべてを攻撃者に与えるセキュリティ・ポリシーの場所をその場所に設定する可能性があります。
    insertProvider 新しいプロバイダの追加 悪意のあるプロバイダ(受け取った非公開鍵を暴露するプロバイダなど)を、もっとも高い優先順位を持つプロバイダとして追加できるようになります。 これは、インストールされているプロバイダを管理する現在のSecurityオブジェクトは、プロバイダを追加する前に、その整合性や信頼性のチェックは行わないためです。 「insertProvider」アクセス権は、「insertProvider.{provider name}」アクセス権を包含しています(詳細は次の項を参照)。
    removeProvider.{provider name} 指定したプロバイダの削除。 プログラムの他の部分の動作を変更したり、その実行を無効にすることができるようになります。 プログラムが要求したプロバイダがすでに削除されてしまった場合、実行が異常終了する可能性があります。 また、削除されたプロバイダがプログラムの残りの部分で要求されていなくても、そのプロバイダが、通常、暗号化サービスが要求されたときに選ばれるプロバイダである場合は(プロバイダのリストで前の方にあるため)、代わりに別のプロバイダが選ばれるか、適切なプロバイダが見つからない場合はエラーになります。
    clearProviderProperties.{provider name} Providerによって実装されているサービスの参照に使用されるプロパティが空になるように、Providerを「クリア」する。 プロバイダによって実装されているサービスの参照が無効になります。 したがって、アクセス権「removeProvider.{provider name}」の部分で説明しているように、通常はそのProviderを利用しているプログラムの他の部分の動作が変更されたり、その実行が無効になったりする可能性があります。
    putProviderProperty.{provider name} 指定したProviderのプロパティの設定。 プロバイダのプロパティは、そのプロバイダによって実装されている特定のサービスの名前と場所を指定します。 このアクセス権を与えると、コードからサービスの指定を変更し、別の実装を指定できるようになります。
    removeProviderProperty.{provider name} 指定したProviderからのプロパティの削除。 プロバイダによって実装されているサービスの参照が無効になります。 プロバイダの名前と場所を指定したプロパティが削除されるため、そのプロバイダにはアクセスできなくなります。 したがって、アクセス権「removeProvider.{provider name}」の部分で説明しているように、通常はそのProviderを利用しているプログラムの他の部分の動作が変更されたり、その実行が無効になったりする可能性があります。

    次のアクセス権は、新しいアクセス権で置き換えられているか、または推奨されなくなったクラスに関連付けられています。IdentityIdentityScopeSigner それらの使用は非推奨です。 詳細については、該当するクラスを参照してください。

    ターゲット名、許可が許可するもの、および関連するリスク
    アクセス権ターゲット名 アクセス権により許可される操作 このアクセス権を許可した場合のリスク
    insertProvider.{provider name} 指定した新しいプロバイダの追加。 Provider.getName()メソッドをオーバーライドすることで名前制約を回避できる可能性があるため、このアクセス権の今後の使用は非推奨です。 また、特定の名前または選択された名前を持つプロバイダを挿入するアクセス権をコードに付与することに関しても、同等レベルのリスクがあります。 ユーザーは、かわりに「insertProvider」アクセス権を使用するようにしてください。

    悪意のあるプロバイダ(受け取った非公開鍵を暴露するプロバイダなど)を、もっとも高い優先順位を持つプロバイダとして追加できるようになります。 これは、インストールされているプロバイダを管理する現在のSecurityオブジェクトは、プロバイダを追加する前に、その整合性や信頼性のチェックは行わないためです。

    setSystemScope システムのアイデンティティ・スコープの設定。 攻撃者は、信頼されるべきでない証明書を使用してシステムのアイデンティティ・スコープを構成し、そのような証明書を使用して署名されたアプレットやアプリケーションのコードに、システムの元のアイデンティティ・スコープでは拒否されていた特権を与えることができます。
    setIdentityPublicKey Identityの公開鍵の設定。 アイデンティティが「信頼できるもの」としてマークされている場合、攻撃者は、システムのアイデンティティ・スコープが信頼していない別の公開鍵(独自の公開鍵など)を設定し、その公開鍵を使用して署名されたアプレットやアプリケーションのコードに、本来なら否定されていた特権を与えることができます。
    setIdentityInfo Identityの概要を表す文字列の設定。 攻撃者は、アイデンティティの概要を表す文字列を設定できるようになります。 これにより攻撃者は、アプリケーションを騙して目的のものとは異なるアイデンティティを使用させるようにしたり、特定のアイデンティティを見つけることができないようにしたりできます。
    addIdentityCertificate Identityの証明書の追加。 攻撃者は、アイデンティティの公開鍵に証明書を設定できるようになります。 システム全体の信頼関係に影響するため、このアクセス権は危険です。 この公開鍵は、本来よりも広い範囲のコードに対して急に信頼性を持つようになります。
    removeIdentityCertificate Identityの証明書の削除。 攻撃者は、アイデンティティの公開鍵のための証明書を削除できるようになります。 システム全体の信頼関係に影響するため、このアクセス権は危険です。 この公開鍵は、急に本来よりも信頼性が低く見なされるようになります。
    printIdentity アイデンティティの本人の名前、および必要に応じてそのアイデンティティが使用されるスコープ、そのアイデンティティがスコープ内で「信頼できる」と見なされているかどうかを表示する。 出力されるスコープがファイル名の場合、ローカル・システムの情報が伝達されてしまうことがあります。 たとえば、「carol」という名前のアイデンティティのサンプル出力を示します。「carol」は、ユーザーのアイデンティティ・データベースでは「信頼されない」としてマーク付けされています。
    carol[/home/luehe/identitydb.obj][not trusted]
    getSignerPrivateKey 署名者の非公開鍵の取得。 非公開鍵へのアクセスを許可するのは非常に危険です。非公開鍵は、ほかに知られないようにしておくことが前提になっています。 非公開鍵が知られてしまうと、コードはその非公開鍵を使用してさまざまなファイルに署名し、署名がその署名者のものであると主張できるようになります。
    setSignerKeyPair 署名者の鍵のペア(公開鍵と非公開鍵)の設定。 攻撃者は、他人(標的)の鍵のペアを、それよりも弱い鍵のペア(キー・サイズの小さいものなど)と置き換えることができるようになります。 また、標的とその通信相手との間の暗号化されたやりとりを傍受できるようにもなります。 標的の通信相手が、標的の「新しい」公開鍵を使用して暗号化セッション鍵をラップしても、攻撃者(対応する非公開鍵の所有者)は、「新しい」公開鍵を使用してそのセッション鍵のラップを解除し、そのセッション鍵を使用して暗号化された通信データを解読できます。
    実装上の注意:
    実装は追加のターゲット名を定義するかもしれませんが、名前の衝突を避けるために逆ドメイン名表記法などの命名規則を使用する必要があります。
    導入されたバージョン:
    1.2
    関連項目:
    BasicPermission, Permission, Permissions, PermissionCollection, SecurityManager, 直列化された形式
    • コンストラクタの詳細

      • SecurityPermission

        public SecurityPermission​(String name)
        新しいSecurityPermissionを指定された名前で作成します。 この名前はSecurityPermissionのシンボリック名です。 名前の末尾には「*」や「.*」を付けて、ワイルドカードを指定できます。
        パラメータ:
        name - セキュリティ・アクセス権の名前
        例外:
        NullPointerException - namenullの場合。
        IllegalArgumentException - nameが空である場合。
      • SecurityPermission

        public SecurityPermission​(String name,
                                  String actions)
        指定された名前を持つ新しいSecurityPermissionオブジェクトを作成します。 nameはSecurityPermissionのシンボリック名です。actionsの文字列は現在使用されておらず、nullになります。
        パラメータ:
        name - セキュリティ・アクセス権の名前
        actions - nullでなければならない。
        例外:
        NullPointerException - namenullの場合。
        IllegalArgumentException - nameが空である場合。