模块 java.base

类 SecurityPermission

所有已实现的接口:
Serializable , Guard

public final class SecurityPermission extends BasicPermission
此类用于安全权限。 SecurityPermission 包含名称(也称为“目标名称”)但没有操作列表;您要么拥有命名权限,要么没有。

目标名称是安全配置参数的名称(见下文)。目前,SecurityPermission 对象用于保护对 AccessControlContext Policy Provider Security Signer Identity 对象的访问。

下表列出了标准的 SecurityPermission 目标名称,并为每个提供了权限允许的内容的描述以及对授予代码权限的风险的讨论。

目标名称、权限允许的内容以及相关风险
权限目标名称 权限允许什么 允许此权限的风险
authProvider.{提供者名称} 允许指定的提供者成为登录和注销操作的 AuthProvider。 这允许指定的提供者执行登录和注销操作。指定的提供者必须扩展 AuthProvider 并且必须注意授予受信任的提供者,因为登录操作涉及敏感的身份验证信息,例如 PIN 和密码。
创建访问控制上下文 创建 AccessControlContext 这允许某人使用 DomainCombiner 实例化 AccessControlContext。授予此权限时必须格外小心。恶意代码可以创建一个 DomainCombiner 来增加授予代码的权限集,甚至授予代码 AllPermission
getDomainCombiner 检索 AccessControlContext 的 DomainCombiner 这允许某人检索 AccessControlContext 的 DomainCombiner 。由于 DomainCombiners 可能包含敏感信息,这可能会导致隐私泄露。
getPolicy 检索系统范围的安全策略(特别是当前安装的策略对象) 这允许某人通过 getPermissions 调用查询策略,该调用公开了将授予给定 CodeSource 的权限。虽然泄露策略不会危及系统的安全性,但它确实为恶意代码提供了额外的信息,它可以使用这些信息来更好地瞄准攻击。不泄露不必要的信息是明智的。
setPolicy 设置系统范围的安全策略(特别是策略对象) 授予此权限非常危险,因为恶意代码可能会授予自己成功对系统发起攻击所需的所有必要权限。
createPolicy.{策略类型} 从提供者处获取策略实现的实例 授予此权限使代码能够获取 Policy 对象。恶意代码可能会查询 Policy 对象以确定授予了除自身之外的代码哪些权限。
getProperty.{key} 使用指定密钥检索安全属性 根据已授予访问权限的特定密钥,代码可以访问安全提供程序列表,以及系统范围和用户安全策略的位置。虽然泄露此信息不会危及系统的安全性,但它确实为恶意代码提供了额外的信息,可以用来更好地进行攻击。
setProperty.{key} 使用指定密钥设置安全属性 这可能包括设置安全提供程序或定义系统范围的安全策略的位置。有权设置新安全提供程序的恶意代码可能会设置一个恶意提供程序来窃取加密私钥等机密信息。此外,具有设置系统范围安全策略位置权限的恶意代码可能会将其指向一个安全策略,该安全策略授予攻击者成功对系统发起攻击所需的所有必要权限。
插入提供者 添加新的提供者 这将允许某人引入一个可能是恶意的提供者(例如,泄露传递给它的私钥的提供者)作为最高优先级的提供者。这是可能的,因为安全对象(管理已安装的提供者)当前在附加提供者之前不检查提供者的完整性或真实性。 “insertProvider”权限包含“insertProvider.{provider name}”权限(有关详细信息,请参阅下面的部分)。
removeProvider.{供应商名称} 删除指定的提供者 这可能会改变行为或禁用程序其他部分的执行。如果程序随后请求的提供者已被删除,则执行可能会失败。此外,如果删除的提供者没有被程序的其余部分明确请求,但它通常是在请求加密服务时选择的提供者(由于它在提供者列表中的先前顺序),将选择不同的提供者相反,否则将找不到合适的提供者,从而导致程序失败。
clearProviderProperties.{供应商名称} “清除”提供者,使其不再包含用于查找提供者实现的服务的属性 这将禁用对提供者实现的服务的查找。因此,这可能会改变行为或禁用通常会使用提供程序的程序其他部分的执行,如“removeProvider.{provider name}”权限中所述。
putProviderProperty.{提供者名称} 为指定的 Provider 设置属性 每个提供者属性都指定提供者实现的特定服务的名称和位置。通过授予此权限,您可以让代码用另一个服务规范替换服务规范,从而指定不同的实现。
removeProviderProperty.{提供者名称} 从指定的 Provider 中删除属性 这将禁用对提供者实现的服务的查找。由于删除了指定其名称和位置的属性,因此无法再访问它们。如“removeProvider.{provider name}”权限中所述,这可能会更改行为或禁用通常会使用 Provider 的程序其他部分的执行。

以下权限已被更新的权限取代或与已弃用的类相关联:Identity IdentityScope Signer 。不鼓励使用它们。有关详细信息,请参阅适用的类别。

目标名称、权限允许的内容以及相关风险
权限目标名称 权限允许什么 允许此权限的风险
insertProvider.{供应商名称} 添加具有指定名称的新提供者 不鼓励进一步使用此权限,因为可以通过覆盖 Provider.getName() 方法来规避名称限制。此外,授予代码权限以插入具有特定名称或它选择的任何名称的提供程序也存在同等级别的风险。用户应该改用“insertProvider”权限。

这将允许某人引入一个可能是恶意的提供者(例如,泄露传递给它的私钥的提供者)作为最高优先级的提供者。这是可能的,因为安全对象(管理已安装的提供者)当前在附加提供者之前不检查提供者的完整性或真实性。

设置系统范围 系统身份范围的设置 这将允许攻击者使用不应信任的证书配置系统身份范围,从而授予使用这些证书签名的小应用程序或应用程序代码特权,而这些特权本来会被系统的原始身份范围拒绝。
设置身份公钥 为身份设置公钥 如果身份被标记为“受信任”,这将允许攻击者引入不受系统身份范围信任的不同公钥(例如,它自己的),从而授予使用该公钥签名的小应用程序或应用程序代码特权,这将否则被拒绝。
设置身份信息 为身份设置一般信息字符串 这允许攻击者设置身份的一般描述。这可能会诱使应用程序使用与预期不同的身份,或者可能会阻止应用程序找到特定身份。
addIdentityCertificate 为身份添加证书 这允许攻击者为身份的公钥设置证书。这很危险,因为它会影响整个系统的信任关系。这个公钥突然变得比其他情况下更广泛的受众信任。
移除身份证书 删除身份证书 这允许攻击者删除身份公钥的证书。这很危险,因为它会影响整个系统的信任关系。这个公钥突然变得不那么可信了。
printIdentity 查看主体的名称和可选的使用范围,以及它是否在该范围内被视为“受信任” 打印出来的范围可能是一个文件名,在这种情况下它可能传达本地系统信息。例如,下面是名为“carol”的身份的示例打印输出,该身份在用户的身份数据库中被标记为不受信任:
卡罗尔[/home/luehe/identitydb.obj][不可信]
getSignerPrivateKey 检索签名者的私钥 允许访问私钥是非常危险的;私钥应该保密。否则,代码可以使用私钥对各种文件进行签名,并声称签名来自签名者。
设置签名者密钥对 为签名者设置密钥对(公钥和私钥) 这将允许攻击者用可能较弱的密钥对(例如,较小密钥大小的密钥对)替换其他人(“目标”)的密钥对。这也将允许攻击者监听目标与其对等方之间的加密通信。目标的对等方可能会在目标的“新”公钥下包装一个加密会话密钥,这将允许攻击者(拥有相应的私钥)解开会话密钥并解密在该会话密钥下加密的通信数据。
实现注意事项:
实现可以定义额外的目标名称,但应使用命名约定(例如反向域名表示法)以避免名称冲突。
自从:
1.2
参见:
  • 构造方法详细信息

    • SecurityPermission

      public SecurityPermission(String  name)
      使用指定的名称创建一个新的 SecurityPermission。该名称是 SecurityPermission 的符号名称。星号可能出现在名称的末尾,跟在“.”之后,或者单独出现,以表示通配符匹配。
      参数:
      name - SecurityPermission 的名称
      抛出:
      NullPointerException - 如果 namenull
      IllegalArgumentException - 如果 name 为空。
    • SecurityPermission

      public SecurityPermission(String  name, String  actions)
      创建具有指定名称的新 SecurityPermission 对象。该名称是 SecurityPermission 的符号名称,而操作 String 当前未使用,应该是 null
      参数:
      name - SecurityPermission 的名称
      actions - 应该是 null
      抛出:
      NullPointerException - 如果 namenull
      IllegalArgumentException - 如果 name 为空。