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),证书本身需要存储在某处(通常存储在文件中),保存证书的位置被称为密钥库

 

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