Java沙箱的要素

一、權限(permission)

權限,是允許代碼執行的具體操作。權限可以是專門的讀取指定文件,也可以是通用的。

權限本身包括三個要素:權限類型、權限名以及允許的操作。

  • 權限類型:是必須的,實際上是一個實現權限的Java類名,如:java.security.AllPermission
  • 權限名:有一些權限(如java.security.AllPermission不限制代碼的操作)不需要權限名。一般情況下,需要基於權限類型設置相應的權限名,如文件權限的權限名就可以是一個文件名或目錄名。通常用通配符指定權限名。
  • 允許的操作:對應於權限類型。有些權限本身就沒有操作。權限操作指定了對目標可以執行的操作行爲,如文件權限可以指定對某文件可讀、可寫或可刪除

下面是三個權限的例子。第一個指定了權限類型,第二個指定了類型和權限名,第三個則三個都指定了

permission java.security.AllPermission;

permission java.lang.RuntimePermission "stopThread"

permission java.io.FilePermission "/tmp/foo" , "read"

 

二、代碼源(code source)

代碼源是類所在的位置,若對類做了簽名,則簽名者的信息也在代碼源中保存。

該位置被指定位URL地址,此URL地址遵循標準Java實現:代碼可以通過基於文件的URL從文件系統獲得,也可以通過基於網絡的URL從網絡上獲得

在代碼源中的URL和簽名者信息都是可選項。賦予某些類權限時可以只基於類所在代碼的URL,也可以只根據類的簽名者確定其權限

一般稱代碼源中的URL爲代碼基

 

三、保護域(protection domain)

保護域是爲將代碼源的權限進行組合而建立的。保護域是默認沙箱中的基本概念

即一個保護域包含了多條代碼源和其權限的關聯信息

 

四、策略文件(policy file)

策略文件時控制沙箱的管理要素。策略文件通常包括一個或多個保護域的項。

通常情況下,我們認爲是策略文件中的項完成了代碼權限的指定任務。

通常使用的只有兩類策略文件:

  • 全局策略文件:可以應用於虛擬機中使用的所有實例
  • 用戶專用策略文件:指定用戶使用

 

五、密鑰庫(keystore)

代碼簽名需要基於公開密鑰證書(public key certificate),證書本身需要存儲在某處(通常存儲在文件中),保存證書的位置被稱爲密鑰庫

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章