您的位置:首页 > 运维架构 > 网站架构

java沙盒安全架构总结

2011-12-07 21:23 204 查看

                        java沙盒安全架构总结

          最近因项目需要,较深入了研究了下java的沙盒机制,相当强大。官方的安全架构、权限说明以及api文档中信息非常详细。研究后简单总结下。

        Java的沙盒机制主要根据代码的url(位置)和签名为其赋予不同的权限,jdk中已对系统敏感性操作都会提前检测权限,如线程创建,文件系统读写等,从而可以构建出运行于JVM的各种不同的沙盒环境。java内建的沙盒机制非常灵活和强大。

1、权限授予方有三个:

1)Policy 对象:开始时根据策略文件等初始化的一个策略对象,可以根据code的url位置和签名赋予不同权限。

2)URLCloader(SecureClassLoader):动态的根据codeSource(url和签名)赋予不同权限,这个权限根据实现方式可以累加到policy赋予的权限(默认的URLClassLoader实现就是这样),也可以特殊处理。

3)SecurityManager,在进行权限检测前,可以定制,添加一些强制的权限检测,并可以选择是否使用默认的权限检测机制。SecurityManager是权限检测的入口。

2、权限的组织方式

一个类的权限是其所属保护域所具备的权限,主要要codeSource、ClassLoader、原则列表(较少用到)决定。具体权限授予的原则上面已介绍。

3、运行时权限检测的原则:

由AccessController中的权限检测算法决定,在基于已有的保护域的权限的基础上,对于多个类递归调用时涉及到多个保护域的情况下的相应代码的运行时权限的计算策略:

1)调用链上,执行代码权限为所有调用者权限的合集,即递归调用者都具备相应代码所需权限时,才能执行。

2)原则1)唯一的例外,是特权代码,在特权代码中,只要特权代码的所有者有相应权限就可执行该代码,无需调用者具备相应代码的权限。(例如用内部库需要临时文件权限的情况,调用者就无需赋予库临时文件的权限)

3)AccessControlContext这个动态权限检测所需的环境上下文在起子线程时,会被子线程集成。即子线程中执行某段代码时,即检查子线程的上下文调用者的权限,也检测父线程调用者的权限。

4)可以将AccessControlContext传递给与当前发起请求的线程独立的响应请求的线程,以便响应线程检测发起请求的线程中的调用者是否具备响应线程内要执行的代码的权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息