首先,现在已经很少人用applet,applet本身也算是快要没落的技术了。然而,最近根据项目需要,开始研究和学习applet。有了一点收获,拿来大家分享。写的不好欢迎指正,但是诸如applet已经淘汰之类的话,请免开尊口,浪费你我的时间。
众所周知,Java具有很好的安全控制,就是有名的沙盒模型。Applet可以在沙盒里做任何事情,但不能读或修改沙盒外的任何数据。沙盒”模型的思想是在信任的环境中运行不信任的代码,这样即使用户不小心引入了不安全的applet,applet也不会对系统造成破坏。关于沙盒模型的结构再次我将不再赘述,网上都可以搜到。
首先,补充下 Java中安全策略的概念的概念(下面两段整理自网上)
Java应用程序环境的安全策略,详细说明了对于不同的代码所拥有的不同资源的许可,它由一个Policy对象来表达。为了让applet(或者运行在 SecurityManager下的一个应用程序)能够执行受保护的行为,例如读写文件,applet(或
Java应用程序)必须获得那项操作的许可,安全策略文件就是用来实现这些许可。
Policy对象可能有多个实体,虽然任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用getPolicy方法得到,也可以通过调用setPolicy方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明哪些代码可以访问哪些资源。
策略文件可以储存在无格式的ASCII文件或Policy类的二进制文件或数据库中。本文仅讨论无格式的ASCII文件的形式。
关于Policy的格式,如果装了JRE或JDK,可以在\jdk安装目录\jre\lib\security\java.policy文件和\jdk安装目录\jre\lib\security\java.security\java.policy下面找到。里面主要规定了给予不同程序的不同的权限。
其次,说明一下policy的加载顺序。当调用policy文件时,系统会装载.java.policy文件到系统中。首先加载系统的policy文件,然后用户的Policy,这里的方式是叠加,取用户和系统规定的权限的最大值。如果两者的policy都不存在则加载系统默认的policy文件。
系统Policy文件的缺省位置为:
{java.home}/lib/security/java.policy (Solaris)
{java.home}\lib\security\java.policy (Windows) 用户Policy文件的缺省位置为:
{user.home}/.java.policy (Solaris) {user.home}\.java.policy
(Windows)
上面对policy加载的策略理解很重要,我们在这里关于权限提升主要就是通过修改用户的策略文件的权限来实现applet权限的提升。
介绍完了基础概念,开始我们的提升权限之旅。
首先,书写一个类WritePolicy,其唯一的类方法是: