广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 湛江计算机学校 > 正文

解决JDK7线程克隆漏洞的方法_湛江软件开发小知识_湛江软件教程

作者:admin发布时间:2020-11-26分类:湛江计算机学校浏览:914


导读:如何解决JDK7线程克隆漏洞的方法这个问题之前提过,不过一直都被忽视了,以下再给大家讲讲。之前JDK6的克隆漏洞用一种比较安全有效的方式予以解决了。在JDK7中之...

如何解决JDK7线程克隆漏洞的方法这个问题之前提过,不过一直都被忽视了,以下再给大家讲讲。

之前 JDK 6 的克隆漏洞用一种比较安全有效的方式予以解决了。在 JDK 7 中之前一直都是尝试通过继承 Object.clone() 来处理而不单单是抛出 CloneNotSupportedException 异常。现在遇到一个问题就是,在java中(.NET 亦是如此)继承一个方法并不是让父类方法不可用的安全手段。

还有一个点可能大家都忽视了 —— ACC_SUPER 可以让你调用父类中的任何可访问的方法。因此 Thread.clone() 可被忽略,然后直接在线程的子类(源码中不带有 ACC_SUPER 标志)中调用 Object.clone() 方法。

这里有个例子:

class Clone extends Thread implements Cloneable {

public Object clone() {

try { return super.clone(); }

catch (CloneNotSupportedException _) { throw new Error(); }

  }

}

class Demo {

  public static void main(String[] args) throws Throwable {

    Clone c1 = new Clone() {

      public void run() {

        for (;;) {

        }

      }

    };

    c1.start();

    Thread t = (Thread)c1.clone();

    c1.stop();

    c1.join();

    System.gc();

    t.stop();

  }

}

 

在这里如果说你用 JDK 6 进行执行编译,你需要编辑 Clone.class 以清除 ACC_SUPER 标志。可使用任意十六进制编辑器将 20(十六进制) 替换为 00,以下代码是已经替换好的源码。

你可以再本地运行试试效果:

view sourceprint?

C:\j>\jdk1.7-b145\bin\java Demo

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006cd5af54, pid=3708, t id=10460

JRE version: 7.0-b145

Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0-b15 mixed mode windows-amd64 compressed oops)

Problematic frame:

V [jvm.dll+0x1caf54]

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

An error report file with more information is saved as:

C:\j\hs_err_pid3708.log


湛江计算机学校排行
标签列表
网站分类
文章归档
最近发表