`
maoone2003
  • 浏览: 58447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

突破java applet安全沙箱限制

阅读更多
这几天上网查了好多资料如何突破java安全沙箱限制,使用了数字签名仍然不行,万不得以,采用如下方法解决,呵呵:
第一步:编写在本地文件用户目录写java.policy的工具类
package com.northking;

import java.io.File;
import java.io.FileWriter;

/**
 * 处理java安全以突破java安全沙箱限制
 * <p>Title: </p>
 * <p>Description: 影像查询socket客户端</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: 北京京北方科技股份有限公司</p>
 * @author 毛昌明
 * @version 1.0
 */
public class JavaPolicyUtil {
  public JavaPolicyUtil() {
  }

  /**
   * 检查JAVA 安全是否自动到位
   * @return boolean
   */
  public static boolean checkJavaPolicy() {

    //处理系统安全
    String sysDir = System.getProperty("deployment.system.home");
    System.out.println("sysDir:" + sysDir);
    boolean isSysBoot = checkPolicyDir(sysDir);
    String userDir = System.getProperty("deployment.user.home");
    System.out.println("userDir:" + userDir);
    boolean isUserBoot = checkPolicyDir(userDir);
    if (isSysBoot || isUserBoot) {
      System.out.println("您的系统作首次初始化操作成功,如果无法正常工作,请关闭浏览器并重新打开重试。");
    }
    return true; //文件已存在,
  }

  private static boolean checkPolicyDir(String sDir) {
    boolean result = false;
    String vers = System.getProperty("java.version");
    try {
      if (vers.compareTo("1.4") < 0) {
        //处理JRE或JDK低于1.4的安全性
        String path = System.getProperty("java.home");
        String securityFilePath = path + "/" + "lib/security";
        System.out.println("securityFilePath:" + securityFilePath);
        String policyFile = securityFilePath + "/java.policy";
        if (checkFile(policyFile) == 0) { //文件存在
          File f = new File(policyFile);
          f.delete();
          System.out.println("Original Policy file deleted!");
          writePolicyFile(policyFile);
        }
        else {
          writePolicyFile(policyFile);
        }
      }
      else { //处理JDK1.4的安全,原有的处理方法。
        String policyPath;
        String policyFile;
        if (sDir != null) {
          policyPath = sDir + "/security";
          policyFile = policyPath + "/java.policy";
          if (checkFile(policyFile) == 0) { //文件存在
            return false;
          }
          else {
            createDir(policyPath);
            result = writePolicyFile(policyFile);
          }
        }
        return result;
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    return result;

  }

  /**
   * control the java application access JVM permittion
   * @param policyFile String
   * @return boolean
   */
  private static boolean writePolicyFile(String policyFile) {
    try {
      FileWriter fout = new FileWriter(policyFile);
      fout.write("grant { \r");
      fout.write("	permission java.security.AllPermission; \r");
      fout.write("  }; \r");
      fout.flush();
      fout.close();
      System.out.println("policy Write OK:" + policyFile);
      return true;

    }
    catch (Exception ex) {
      System.err.println("write policy file is error:" + ex.getMessage());
      return false;
    }
  }

  /**
   * 创建指定路径的文件夹
   * @param _path String
   */
  private static void createDir(String _path) {
    try {
      File f = new File(_path); //create directory each level by level
      if (!f.exists()) {
        f.mkdirs();
      }
      System.out.println("Create Direcory:" + _path);
    }
    catch (Exception ex) {
      System.err.println("Create Direcory Error: " + ex.getMessage());
    }
  }

  /**
   * 检查一个是否为文件或子目录
   * @param filename String
   * @return int 0: file, 1:directory,-1:no exits
   */
  private static int checkFile(String filename) {
    File f = new File(filename);
    if (f.isFile()) {
      return 0;
    }
    else if (f.isDirectory()) {
      return 1;
    }
    else {
      return -1;
    }
  }

}

第二步:在applet 的init方法中调用:
  public void init(){
    System.out.println("socket transfer client version:(" + version + ")");
    JavaPolicyUtil.checkJavaPolicy();
  }

第三步:进行数字签名,我所用的语句如下:
jar cvf PicTransApplet.jar com/
echo keytool -genkey -alias mykey -keyalg RSA -validity 2000 -keysize 1024 -keypass 123456 -keystore mykey.store -storepass 123456
jarsigner -keystore mykey.store -storepass 123456 -keypass 123456 PicTransApplet.jar mykey   
pause


当然这种方法并不是最好的,但是项目实在太紧,就先用它顶着啦,呵呵;听说还有其它方法,就是说在init方法中启动一个线程一直进行业务监听,因为applet对于其内部实现是不受安全沙箱限制的(我的applet是要在页面上通过javascript调用的哟),但是我不是很懂,如果其它朋友有此经验,请分享,谢谢。
分享到:
评论
4 楼 unicorn00 2008-05-19  
這個與ActiveX控件是否一樣原理???
3 楼 jvincent 2008-01-30  
既然把权限放开了,还需要进行签名?
2 楼 LifeFree 2008-01-30  
<p>二楼说的是正确的。对于签名的applet,我想你需要的是使用</p><pre name='code' class='java'>AccessController.doPrivileged(new PrivilegedExceptionAction() {
    public Object run() throws Exception {
//you unsafe code                  
        return null;
    }
});</pre> <p> </p><p> </p>
1 楼 rehte 2008-01-30  
你没有理解Applet的安全模型,看看这儿的文档就明白了:
http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/security.html
三条原则:
引用
    * All unsigned applets are run under the standard applet security model.
    * If usePolicy is not defined in the java.policy file, then a signed applet has the AllPermission permission only if Java Plug-in can verify the signers, and the user agrees to granting the AllPermission permission when prompted.
    * If usePolicy is defined, then a signed applet has only the permissions defined in java.policy and no prompting occurs.

相关推荐

    JavaApplet_javaapplet小程序_java_

    由于Applet可能来自不可信的网络源,因此Java引入了安全沙箱模型,限制了Applet的权限,如读写本地文件、访问网络资源等。这降低了恶意Applet对用户系统的潜在威胁。 六、JavaApplet的局限性与替代方案 随着Web...

    Java Applet 入门教程

    - 由于安全原因,Java Applet运行在沙箱环境中,不能访问本地系统资源,除非用户明确授权。 - 这限制了Applet的功能,但保证了用户的安全。 6. **Java Applet的替代技术** - 随着Web技术的发展,Java Applet逐渐...

    javaapplication和javaapplet的区别

    - **安全性**:由于Java Applet的运行环境较为受限,它通常被设计得更加安全,以防止恶意代码对用户的计算机造成损害。 - **资源使用**:Java Applet由于其特定的运行环境和限制,通常消耗较少的资源。 - **开发...

    java Applet技术文档

    - Applet的安全模型:由于运行在用户机器上,Applet受到安全沙箱限制,不能访问本地文件系统或网络资源,除非用户明确授予权限。 - 数字签名:为了突破安全限制,开发者可以对Applet进行数字签名,以增加信任度。 ...

    javaapplet实例讲解

    为了缓解这个问题,Java引入了安全沙箱模型,限制了Applet的一些操作,比如读写文件、网络通信等。然而,即使如此,Applet的安全性仍不理想,这也是它逐渐被淘汰的原因之一。 7. **替代技术**: 如今,JavaScript...

    利用数字签名超越Java Applet的安全限制.doc

    总结来说,要超越Java Applet的安全限制,开发者可以为Applet的代码进行数字签名,然后配置Policy文件,赋予Applet特定的权限,如访问本地文件系统或特定网络资源。这种方式使得Applet可以在用户同意的情况下执行更...

    JavaApplet实例及教程

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

    java applet应用实例

    鉴于Java Applet的限制和Java平台的发展,JavaFX和Swing成为了开发桌面应用和Web应用的首选,它们提供了更丰富的UI组件和更好的性能,同时不受Applet的安全限制。 总的来说,这个Java Applet应用实例集提供了丰富...

    简单的java applet图像移动重画实例

    - Applets的安全限制:由于运行在客户端,它们受到安全沙箱的限制,不能访问本地文件系统或网络资源,除非用户明确授权。 2. **Java AWT(Abstract Window Toolkit)**: - AWT是Java图形用户界面(GUI)的基础,...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    2. **安全性**:Java Applet运行在Java安全沙箱内,限制了对本地系统资源的访问,以保护用户的系统安全。 3. **网络通信**:Applet可以与服务器进行通信,获取数据或更新自身。 4. **生命周期**:Applet有自己的...

    Java Applet实例编程

    7. **安全性限制**:由于安全原因,Java Applet运行在沙箱环境中,不能访问本地文件系统或网络资源,除非用户明确授予权限。 8. **Java Web Start(JWS)**:随着Java Applet的逐渐淘汰,Java Web Start提供了一种...

    java applet 简单案例

    Java Applet曾是Web开发的重要组成部分,但由于安全考虑已被逐渐淘汰。然而,学习Java Applet仍然有助于理解客户端程序的运行机制和Web应用的发展历程。通过简单的案例,你可以快速掌握Applet的基本概念和编程模式,...

    Java Applet

    由于安全原因,Java Applet运行在沙箱环境中,不能访问用户的文件系统或网络,除非用户明确授予了权限。这限制了Applet的某些功能,但也保护了用户的安全。 **5. Applet的使用与局限** 随着Web技术的发展,Java ...

    java Application与java Applet的区别

    Java Application在权限上较为宽松,可以执行读/写文件等操作,而Java Applet受到沙盒模型的严格限制,禁止对本地文件系统进行读写操作,以保护用户数据安全。这一限制虽然牺牲了一定的功能性,但极大地增强了Web...

    javaApplet学习简单例子

    8. **安全性限制**:由于Applet是在客户端运行,出于安全考虑,Java沙箱环境会限制Applet的权限,比如不能直接访问本地文件系统。 9. **JRE支持**:Java Applet需要用户的浏览器或系统安装了Java Runtime ...

    javaApplet 实例入门教程

    由于Applet运行在用户的机器上,为了安全考虑,Java沙箱模型对Applet施加了一些限制,比如无法直接访问本地文件系统或网络资源,除非获取了用户的明确许可。 8. **Applet与Java Web Start** 随着Java Web Start的...

    JavaApplet与JavaScript

    **Applet 程序的限制:** 为了安全考虑,大多数浏览器默认禁止了以下操作: 1. **运行时执行其他程序。** 2. **对任何文件进行读写操作。** 3. **调用本地方法。** 4. **尝试连接除提供 Applet 的主机外的其他系统 ...

    JavaApplet仿微信打飞机

    1. **安全性限制**:由于Applet运行在客户端,出于安全考虑,Java沙箱环境会限制Applet的某些操作,如访问本地文件系统。 2. **浏览器兼容性**:随着现代浏览器逐渐淘汰对JavaApplet的支持,开发者需要考虑替代方案...

    java applet

    Java Security Manager负责实施这些限制,确保applet只能在沙箱环境中运行。 4. **与Web服务器的通信** Java Applet可以通过AppletContext对象与服务器进行通信,例如通过`getDocumentBase()`获取包含applet的HTML...

Global site tag (gtag.js) - Google Analytics