`

使用Policy文件控制Applet权限

阅读更多

本文介绍在Java平台上如何访问受限资源,比如读写一个文件。我们通过配置policy文件来使得一个未签名的applet访问系统的受限资源。本文主要由以下内容组成:

  • 对于Applet的限制
  • 如何配置Policy文件
  • 如何使Policy生效

 

对于Applet的限制

Java插件使用Security Manager来防止病毒通过applet侵入你的系统。如果未签名的applet想访问某个系统资源,Security Manager会检查对应的权限是否已经授权,未授权的applet无法访问系统资源。授权需要配置policy文件中的entry。

 

Oracle官方提供了一个applet的例子。

import java.awt.*;
import java.io.*;
import java.lang.*;
import java.applet.*;

public class WriteFile extends Applet {
    String myFile = "writetest";
    File f = new File(myFile);
    DataOutputStream dos;

  public void init() {
    
    String osname = System.getProperty("os.name");
  }

  public void paint(Graphics g) {
	try {
  	  dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(myFile),128));
	  dos.writeChars("Cats can hypnotize you when you least expect it\n");
	  dos.flush();
	  g.drawString("Successfully wrote to the file named " + myFile + " -- go take a look at it!", 10, 10);
	}
	catch (SecurityException e) {
	  g.drawString("writeFile: caught security exception: " + e, 10, 10);
        }
	catch (IOException ioe) {
		g.drawString("writeFile: caught i/o exception", 10, 10);
        }
   }
}

 由代码可知,该applet的功能是创建并写一个名为writetest的文件。当然,在没有修改policy文件前,操作应该被禁止。

 

在你的command窗口输入以下命令去执行该applet:

appletviewer http://docs.oracle.com/javase/tutorial/security/tour1/examples/WriteFile.html

 

期望的行为是,你会看到一个security的异常。

 

如何配置Policy文件

Policy文件是一个ASCII的文本文件。你可以通过文本编辑器或者图形化界面的Policy工具去编辑它。Policy工具好处在于使用方便,不需要知道很详细的policy文件语法,并降低错误的概率。本小节使用Policy工具创建一个名为examplepolicy的policy文件,并在其中添加一个entry来授权存放WriteFile.class文件的目录创建/写名为writetest的文件。

 

使用Policy Tool

在使用之前,请先确认你的机器安装并配置了JDK。在命令行工具中,执行policytool。如果命令不存在,请在$JAVA_HOME/bin目录里找找,windows用户可以找到exe可执行文件。命令会打开policytool的GUI,如下图:


 

从图上可以看到,工具并没有显示任何的policy信息。那是因为,工具启动后会尝试读取用户的policy文件并把对应的信息显示在界面上。用户的policy文件默认以.java.policy来命名。它会保存在用户的Home目录下。如果没找到policy文件,则空白显示,如上图。接着我们会创建一个新的policy文件。

 

授权

Entry是权限的载体。单击‘Add Policy Entry’按钮来创建一个新的entry。接着,你会看到Policy Entry对话框,如下图:


 

单个entry可以指定一个或多个权限。代码来自于特定的代码源(URL),代码被特定的entity签名。

CodeBase和SignedBy文本框指定哪些代码需要授权。

  • CodeBase代表代码源路径。你授权的代码就来自于这个值所对应的路径。注意,空值代表任何代码。
  • SignedBy代表keystore中证书的alias。证书中的公钥用于验证代码的数字签名。代码使用该公钥对应的私钥来签名。SignedBy这个栏位是选填的。不填,代表了"any signer",系统不care代码是否签名,是谁签的。

我们继续使用WriteFile这个例子。如果你想让这个applet拥有创建和写文件的权限,你可以在CodeBase栏位输入:

 

http://docs.oracle.com/javase/tutorial/security/tour1/examples/

 SignedBy不填,因为代码不签。接着我们来授权。点击Add Permission按钮,你会看到如下对话框:


 
 请按照以下步骤授权:

1. 在Permission下拉框选择FilePermission

2. 在Target Name下拉框右侧的文本框内输入writetest。这是你想授权的文件的文件名。

3. 在Actions下拉框内选择write。

 

完成后如下图:


 

点击OK按钮后,界面如下:


 

 点击Done按钮,配置结束。

 

保存Policy文件

点击File菜单,选择Save As后,填写文件名examplepolicy,选择保存路径后,点击Save按钮保存。导航到你指定的目录,打开Policy文件,你会看到如下语句:

grant codeBase "http://docs.oracle.com/javase/tutorial/security/tour1/examples/" {
  permission java.io.FilePermission "writetest", "write";
};

注意文件后缀最好是.java.policy。 

 

如何使Policy生效

既然我们已经创建好Policy文件,就可以再次使用WriteFile applet做个测试。

当你使用security manager运行一个应用的时候,被指定在如下特定文件中的Policy文件会被默认加载。

jre.home/lib/security/java.security

 注:jre.home = jdk.home/jre

 

你可以在java.security文件内找到如下代码:

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

 

不难发现,上述配置属性的值是policy文件的路径。而属性名则按以下规则命名:

policy.url.n

 n为数字,所有Policy文件按如下规则配置到java.security文件中。

policy.url.n=URL

 URL代表你的Policy文件路径,必须符合URL的规则。

 

此外,我们还可以发现,已经有一些默认的Policy文件被系统加载。首先是java.policy,这个文件和java.security位于同一目录下。此外,还有用户目录下的policy文件。

在语法方面,我们可以看到形如${propName}的替换符。比如${java.home}会在运行时替换成真正的JAVA_HOME的值。而${user.home}会被用户的Home目录所替换。

 

 之前我们创建了一个名为examplepolicy的文件,若要把它加到运行时的policy中,有如下两种方式。

 

方式一

使用命令行参数-J-Djava.security.policy,如下:

appletviewer -J-Djava.security.policy=examplepolicy http://docs.oracle.com/javase/tutorial/security/tour1/examples/WriteFile.html

 注意policy和URL之间有个空格。

 

方式二

 在本小节开始部分介绍了java.security文件和在其中指定Policy文件的方法。这种方式比方式一更通用。

在java.security文件中找到policy.url.2,在下方增加一行policy信息:

policy.url.3=file:/你的Policy文件路径

配置保存后,执行如下命令即可:

appletviewer http://docs.oracle.com/javase/tutorial/security/tour1/examples/WriteFile.html

 

 

  • 大小: 11 KB
  • 大小: 13.1 KB
  • 大小: 10 KB
  • 大小: 10.5 KB
  • 大小: 13.8 KB
分享到:
评论
5 楼 Luo_da 2017-09-28  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
4 楼 Luo_da 2017-09-28  
           
3 楼 Luo_da 2017-09-28  
        
2 楼 Luo_da 2017-09-28  
并不能在IE里面运行的。
1 楼 Luo_da 2017-09-28  
087907

相关推荐

    applet提升权限demo

    一个appelt提升权限的demo. 设计到数字签名,创建policy文件,提升权限等问题。

    applet文件上传

    applet文件上传applet文件上传applet文件上传applet文件上传applet文件上传applet文件上传applet文件上传applet文件上传

    孙强上传的applet的保存文件

    孙强上传的applet的保存文件孙强上传的applet的保存文件孙强上传的applet的保存文件孙强上传的applet的保存文件

    Applet通过FTP上传大文件

    一个applet小应用城西,通过commons-net包操作ftp上传大文件,有上传进度显示。上传完成后可以回传文件名和文件路径给js,网页参数设置如下: <applet code="com.cmp.training.ftp.FtpJApplet.class" name="ftp...

    java applet 操作本地文件

    转载:applet来操作本地文件。 数字签名:采用加密技术来实现对签名者身份的认证和数据的完整性。简单的说就是你签字的文件别人知道是你签的,并且知道这个...我们可以通过 数字签名 applet的jar文档来实现控制的策略。

    基于java的开发源码-大文件上传的Applet mupload.zip

    基于java的开发源码-大文件上传的Applet mupload.zip 基于java的开发源码-大文件上传的Applet mupload.zip 基于java的开发源码-大文件上传的Applet mupload.zip 基于java的开发源码-大文件上传的Applet mupload.zip ...

    applet下载操作及权限问题

    applet下载操作实例,对本地文件操作署名问题。

    java applet 签名可控制键盘按键 实现B/S下的一键操作

    可控制键盘按键 当applet用需要签名才有权限

    Applet嵌入Office窗口打开office文件

    当Applet用户访问这样的网页时,Applet被下载到用户的计算机上执行,但前提是用户使用的是支持Java的网络浏览器。由于Applet是在用户的计算机上执行的,所以它的执行速度不受网络带宽或者Modem存取速度的限制,用户...

    自动为java applet的clss文件生成html文件

    为java applet编译后的class文件自动生成一个可运行的html文件,默认保存在class文件目录,可设置applet高度,宽度。 程序为QT开发,运行环境:windows

    js与applet的相互调用资源包

    js与applet的相互调用资源包 js与applet的相互调用资源包

    Applet

    Applet就是使用Java语言编写的一段代码,它可以在浏览器环境中运行。 与Application的区别主要在于其执行方式的不同。 <br> application 是从其中的main() 方法开始运行的,而Applet 是在浏览器中运行的,必须...

    JavaApplet_javaapplet小程序_java_

    一些JavaApplet小程序应用源码例子集,包括小应用程序与应用程序组合、在Applet中弹出窗口、通过HTML文件向Applet传递参数、swing的使用等。

    用applet实现自动从服务器上下载文件

    从服务器上自动下载文件到客户端,不用弹出保存对话框

    JavaApplet实例及教程

    Java+Applet实例讲解(分为1和2两部分)、Java+Applet实例编程、java+Applet登录、JavaApplet教程.pdf、JAVA_applet应用实例.ppt、JavaApplet编程技巧实例专辑、javaapplet例子.doc、Applet类.doc等教程。...

    Applet小游戏 Applet小游戏 Applet小游戏

    Applet做的一个小游戏,多指教。Applet做的一个小游戏,多指教。

    java写的applet音乐播放器

    在Applet中使用下拉框显示音乐文件的名字,在程序中使用AudioChip类控制播放的音乐文件,使用“播放”、“连续”、“停止”控制按钮选择播放音乐的状态。得新建个HTML在当前目录, 内容为 <APPLET CODE = "Music....

    如何在js文件中写加载Applet控件(js与jsp分离技术)

    如何在js文件中写加载Applet控件(js与jsp分离技术)

    Applet与Swing]压缩文件 .rar_applet_swing

    Applet与Swing]压缩文件

    applet签名的方法

    当你applet要进行客户端操作时,如读取本地文件,沙箱原理使你的applet必须得到信任,此时对applet进行签名就可以解决这个问题

Global site tag (gtag.js) - Google Analytics