Age*_*ntX 4 java bytecode inner-classes
当我浏览一些 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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,为了查看是否backdoor创建了这样的方法,我常常javap查看类文件。
这是结果,请参阅printName method
查看该行7:,您将看到invokestatic对 a 的调用Outer.access$0。
查看Outer.class我们可以看到该方法的定义。
这是一个安全漏洞吗?它可以被利用吗?我只是好奇想了解更多这方面的信息。
字节码级别不直接支持嵌套类,因此 Java 源代码中的每个嵌套类都必须编译为单独的类文件。实际上,它们是完全独立的普通类,带有一些用于反射目的的额外元数据。当您访问父级的成员时,嵌套类需要有权访问该父级。
通常,这不是问题,但私有成员只能在定义它们的类中访问,因此不能在内部类中访问。编译器通过创建一个桥接方法来解决这个问题,该方法有效地将访问级别更改为包私有。
这是一个有据可查的现象。这是一个安全漏洞吗?除非你正在做一些非常奇怪的事情。如果您关心安全性,那么依赖 Java 的进程内沙箱并不是一个好主意。但是,如果您正在开发一个无论如何都要这样做的项目,那么是的,这是您在对沙箱进行编码时必须注意的一长串陷阱中的一个。
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |