三,默认沙箱

java默认沙箱:


一,沙箱成员(要素)

1.权限

如:permission java.io.FilePermission "<<ALL FILES>>" , "read,write,delete,execute"

2.代码源

3.保护域

4.策略文件

5.密钥库


二,代码源

权限放在最后总结

1,包含:代码基、签名者

2,代码基可以是任何合法的url,签名者是密钥库中的某一个别名。


三、密钥库

保存证书和密码的数据库。代码如果被签名,需要用密钥库中的证书才能验证


四,策略文件

代码源的权限记录,

我们可以这么说:在这个文件里面,配置了java代码的各种权限。Java代码如果没有权限访问某一个文件,可能与这个配置文件有很大关系


%javahome%\jre\lib\security\java.policy文件默认代码:


// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

// default permissions granted to all domains

grant {
        // Allows any thread to stop itself using the java.lang.Thread.stop()
        // method that takes no argument.
        // Note that this permission is granted by default only to remain
        // backwards compatible.
        // It is strongly recommended that you either remove this permission
        // from this policy file or further restrict it to code sources
        // that you specify, because Thread.stop() is potentially unsafe.
        // See the API specification of java.lang.Thread.stop() for more
        // information.
        permission java.lang.RuntimePermission "stopThread";

        // allows anyone to listen on dynamic ports
        permission java.net.SocketPermission "localhost:0", "listen";

        // "standard" properies that can be read by anyone

        permission java.util.PropertyPermission "java.version", "read";
        permission java.util.PropertyPermission "java.vendor", "read";
        permission java.util.PropertyPermission "java.vendor.url", "read";
        permission java.util.PropertyPermission "java.class.version", "read";
        permission java.util.PropertyPermission "os.name", "read";
        permission java.util.PropertyPermission "os.version", "read";
        permission java.util.PropertyPermission "os.arch", "read";
        permission java.util.PropertyPermission "file.separator", "read";
        permission java.util.PropertyPermission "path.separator", "read";
        permission java.util.PropertyPermission "line.separator", "read";

        permission java.util.PropertyPermission "java.specification.version", "read";
        permission java.util.PropertyPermission "java.specification.vendor", "read";
        permission java.util.PropertyPermission "java.specification.name", "read";

        permission java.util.PropertyPermission "java.vm.specification.version", "read";
        permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
        permission java.util.PropertyPermission "java.vm.specification.name", "read";
        permission java.util.PropertyPermission "java.vm.version", "read";
        permission java.util.PropertyPermission "java.vm.vendor", "read";
        permission java.util.PropertyPermission "java.vm.name", "read";
};




java默认的策略文件路径为:javahome/jre/lib/security/java.policy

策略文件可以通过 policytool工具进行管理,不宜出错

策略文件可以自定义,可以有多个,前提是需要修改java.security文件,


如java.security文件修改如下:

 #把policy.allowSystemProperty 设置为true,允许指定系统属性

policy.allowSystemProperty = true  

#策略文件必须按顺序编号

policy.url.1=file:${java.home}/lib/security/java.policy

policy.url.2=file:${java.home}/lib/security1/java.policy  




五,权限

权限组成要素:类型,名,操作

1,文件权限

如:permission java.io.FilePermission "<<ALL FILES>>" , "read,write,delete,execute"

类型:permission java.io.FilePermission

名:文件的名称(全路径)、通配表示、<<ALL FILES>>等特殊表示

操作: read,write,delete,execute


2,套接字权限

类型:java.net.SocketPermission

名:地址:端口

操作:accept   listen  connect   resolve

如:permission java.net.SocketPermission "*:1-","accept,listen"


3,属性权限

名:java虚拟机属性名

操作:读、写

permission java.util.PropertyPermission "java.*","read"


4,运行时权限

类型:java.lang.RuntimePermission

名:

accessClassInPackage.<name>

accessDeclaredMembers

createClassLoader

createSecurityManager

defineClassInPackage.<name>

exitVM

getClassLoader

getProtectionDomain 获得保护域

loadlibrary.<name> 装载制定的类库

modifyThread 调整线程参数

modifyThreadGroup

queuePrintJob

setIO

stioThread

setSecurityManager 设置安全管理器

..

操作:无,要么执行,要么不执行,所以不需要定义操作

如:permission java.lang.RuntimePermission "accessClassInPackage.sdo.foo"

有一些需要注意的地方  

注意1、.<name>的使用,有点特殊。上句说明sdo.foo包中的类可以被访问。sdo被设置在security文件中,如下

package.access=sun,.sdo.  ,一般这里设置的都是一些特殊的包,如sun包,不允许用户代码直接访问的。

注意2、不准在java标准包中定义任何类,即使有权限也无济于事


5,网络权限(除了套接字,java实现了url等网络类)

类型:java.net.NetPermission

名:specifyStreamHander ,在url类中安装新的流处理器

操作:无


6,AWT权限


7,安全权限

类型:java.security.SecurityPermission

名:addIdentityCertificate 为Identity对象增加一个证书

createAccessControlContext 创建存取控制环境

getDomainCombiner 撤销保护域

getProperty.<prop.name> 读取安全属性

getSignerPrivateKey

...


操作:无


8,序列化权限

类型:java.io.SerializablePermission

名:

enableSubstitution 允许创建对象流 ObjecIInputStream  ObjectOutputStream

enableSubclassImplementation  允许创建对象流子类,覆盖readObject(),writeObject()方法

操作:无


9,反射权限

类型:java.lang.reflect.ReflectPermission

名:suppressAccessChecks  ,检查私有变量

操作:无



10,完全权限

类型:java.security.AllPermission

名:无

操作:无

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值