JavaTM 2 Platform
Standard Ed. 6

java.security
類別 SecurityPermission

java.lang.Object
  繼承者 java.security.Permission
      繼承者 java.security.BasicPermission
          繼承者 java.security.SecurityPermission
所有已實作的介面:
Serializable, Guard

public final class SecurityPermission
extends BasicPermission

此類別用於安全權限。SecurityPermission 套件含一個名稱(也稱為“目標名稱”),但沒有操作列表;可以使用,也可以不使用指定權限。

目標名稱就是安全配置參數的名稱(見下表)。目前 SecurityPermission 物件可用來保護對 Policy、Security、Provider、Signer 和 Identity 物件的存取。

下表列出了所有可能的 SecurityPermission 目標名稱,並提供了權限所允許的操作的簡要說明,還討論了授予程式碼該權限的風險。

權限目標名稱 權限所允許的操作 允許此權限所帶來的風險
createAccessControlContext 創建 AccessControlContext 這允許攻擊者使用 DomainCombiner 實例化 AccessControlContext。由於為 DomainCombiner 提供了到當前堆疊(stack)空間上的 ProtectionDomains 的參考,所以如果 DomainCombiner 是惡意的,則這樣可能會導致隱私洩漏。
getDomainCombiner 獲取 AccessControlContext 的 DomainCombiner 這樣將允許獲取 AccessControlContext 的 DomainCombiner。由於 DomainCombiners 可以包含敏感資訊,所以這可能會潛在地導致隱私洩漏。
getPolicy 獲取系統級安全策略(具體來說,就是獲取當前安裝的 Policy 物件) 這將允許通過 getPermissions 調用來查詢策略,這樣將洩漏授予指定 CodeSource 的權限。雖然暴露策略並不足以危及系統安全,但它確實為惡意程式碼提供了更多資訊,惡意程式碼可能會使用這些資訊更好地鎖定攻擊目標。明智之舉就是不洩漏不必要的資訊。
setPolicy 設置系統級安全策略(具體來說,就是設置 Policy 物件) 授予此權限相當危險,因為惡意程式碼會授予自身成功攻擊系統所需的所有必要權限。
createPolicy.{policy type} 從提供者獲取 Policy 實作的實例 授予此權限將允許程式碼獲取 Policy 物件。惡意程式碼可以查詢該 Policy 物件,以確定除其自身以外授予了程式碼哪些權限。
getProperty.{key} 使用指定的密鑰獲取安全屬性 根據已經授予其存取權的特定密鑰,程式碼可以存取安全提供者列表,以及系統級位置和使用者安全策略。雖然洩漏此資訊並不足以危及系統安全性,但它確實為惡意程式碼提供了更多資訊,惡意程式碼可能會使用這些資訊更好地鎖定攻擊目標。
setProperty.{key} 使用指定的密鑰設置安全屬性 這包括設置安全提供者或定義系統級安全策略的位置。有權設置新的安全提供者的惡意程式碼會設置一個惡意提供者,以盜取諸如加密的私鑰之類別的保密資訊。此外,有權設置系統級安全策略的惡意程式碼還會將此惡意提供者指向安全策略,授予攻擊者成功攻擊系統所需的全部必要權限。
insertProvider.{provider name} 使用指定的名稱添加一個新的提供者 這會使使用者把可能的惡意提供者(例如,洩漏傳遞給它的私鑰的提供者)當作最高優先級的提供者引入。之所以出現這種情況,是因為 Security 物件(它管理已安裝的提供者)目前在接觸該提供者之前不檢查其完整性和真實性。
removeProvider.{provider name} 移除指定的提供者 這可能會更改程序的行為或禁止執行程序的其他部分。如果程序以後請求提供者時該提供者已被移除,則可能導致執行失敗。另外,如果程序的其他部分未明確請求已移除的提供者,但是當請求加密服務時通常會選擇這一提供者(原因在於其在提供者列表中的位置靠前),這時將另外選擇提供者,或者找不到合適的提供者,因而會導致程序失敗。
setSystemScope 設置系統標識範圍 這會允許攻擊者使用不受信任的證書來配置系統標識範圍,並因此授權使用這些證書籤名的 applet 或應用程序程式碼享有被系統的原始標識範圍所拒絕的特權
setIdentityPublicKey 設置標識的公鑰 如果標識被標記為 "trusted"(受信任),這將允許攻擊者引入其他不受系統標識範圍信任的公鑰(例如,它自己的公鑰),因此,將授權使用該公鑰簽章的 applet 或應用程序程式碼享有在其他情況下將遭受拒絕的特權。
setIdentityInfo 設置標識的常規資訊字元串 這將允許攻擊者設置對標識的常規資訊描述。這會欺騙應用程序使用其他標識而不是本打算使用的標識,或者會阻止應用程序尋找特定的標識。
addIdentityCertificate 添加標識證書 這允許攻擊者為標識的公鑰設置證書。這樣將非常危險,因為這會影響整個系統的信任關係。與先前相比,此公鑰的受信任範圍突然變大。
removeIdentityCertificate 移除標識證書 這允許攻擊者移除標識的公鑰證書。這樣將非常危險,因為這會影響整個系統的信任關係。與先前相比,此公鑰的受信任範圍突然變得不如以前。
printIdentity 查看主體名稱和可選的使用範圍,以及在該範圍內是否認為它是“受信任”的 輸出範圍可以是檔案名稱,在這種情況下它可以傳達本機系統資訊。例如,此處是一個輸出名為 "carol" 標識的範例,在使用者的標識資料庫中,它被標記為不受信任:
carol[/home/luehe/identitydb.obj][not trusted]
clearProviderProperties.{provider name} “清除”一個提供者,以使其不再包含用來搜尋由提供者實作的服務的屬性 這將禁用由該提供者實作的服務搜尋。因此,正如 "removeProvider.{provider name}" 權限中所描述的那樣,這可能會更改正常利用該提供者的程序的行為或禁止程序的其他部分的執行。
putProviderProperty.{provider name} 設置指定提供者的屬性 每種提供者屬性都要指定由該提供者實作的特定服務的名稱和位置。通過授予此權限,可以讓程式碼將服務規範替換為另外一種,並據此指定另外一種實作。
removeProviderProperty.{provider name} 從指定的提供者移除屬性 這將禁用由該提供者實作的服務搜尋。由於移除了指定提供者名稱和位置的屬性,所以無法再存取這些提供者。正如 "removeProvider.{provider name}" 權限中所描述的那樣,這可能會更改正常利用該提供者的程序行為或禁止程序其他部分的執行。
getSignerPrivateKey 獲取 Signer 的私鑰 允許存取私鑰是非常危險的;一般認為密鑰是用來保守秘密的。否則,程式碼會使用私鑰簽署各種檔案並聲稱簽章來自 Signer。
setSignerKeyPair 設置 Signer 的密鑰對(公鑰和私鑰) 這將允許攻擊者把其他人的(“目標的”)密鑰對替換為可能更弱的密鑰對(例如,更小密鑰大小的密鑰對)。這還會允許攻擊者偵聽目標與其同位體之間加密的通信。目標的同位體可以用目標的“新”公鑰包裹加密的Session密鑰,這將允許攻擊者(擁有對應私鑰)打開該Session密鑰並解密使用該Session密鑰加密的通信資料。

另請參見:
BasicPermission, Permission, Permissions, PermissionCollection, SecurityManager, 序列化表格

建構子摘要
SecurityPermission(String name)
          創建具有指定名稱的新 SecurityPermission。
SecurityPermission(String name, String actions)
          創建具有指定名稱的新 SecurityPermission 物件。
 
方法摘要
 
從類別 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
 

建構子詳細資訊

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 為空。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only