gpt4 book ai didi

Java - 内部类打开父类的后门

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:26 25 4
gpt4 key购买 nike

当我遇到这个 video 时,我正在阅读一些 JVM 字节码文章。这显示了内部类如何打开一个可以被利用的父范围的后门? (不确定,也许是?)

这是我的测试代码。

public class Outer {

private String name = "You got me!";

public class Inner {
public void printName() {
System.out.println(name);
}
}

public static void main(String[] args) {

Outer o = new Outer();
Inner i = o.new Inner();
i.printName();
}
}

现在要查看是否正在创建这样的 backdoor 方法,我使用 javap 查看类文件。

这是结果,见printName方法

ByteCode for printName method

查看 7: 行,您将看到对 Outer.access$0invokestatic 调用。

查看 Outer.class,我们看到了方法的定义。

backdoor method definition

这是安全漏洞吗?它可以被利用吗?我只是想知道更多这方面的信息。

最佳答案

在字节码级别没有对嵌套类的直接支持,因此 Java 源代码中的每个嵌套类都必须编译为单独的类文件。实际上,它们是完全独立的普通类,带有一些用于反射目的的额外元数据。当您访问父级的成员时,嵌套类需要能够访问该父级。

通常,这不是问题,但私有(private)成员只能在定义它们的类中访问,因此内部类无法访问。编译器通过创建一个有效地将访问级别更改为包私有(private)的桥接方法来解决此问题。

这是一个有据可查的现象。这是一个安全漏洞吗?除非你在做一些非常奇怪的事情,否则不会。如果您关心安全性,那么依赖 Java 的进程内沙箱不是一个好主意。但是,如果您正在从事一个无论如何都会这样做的项目,那么是的,这是您在编写沙箱代码时必须注意的一长串陷阱中的一个。

关于Java - 内部类打开父类的后门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com