Expression类中的execute()

时间:2012-08-31 13:53:10

标签: java reflection applet

Java7中的最新安全漏洞,其中applet可以在用户计算机上执行不受信任的代码。有关详细信息,请访问http://www.h-online.com/security/features/The-new-Java-0day-examined-1677789.html

但我的问题是:提到所有这些都是可能的,因为Expression类中引入了execute()方法。但它没有什么特别之处,这在以前的版本中是不可能的。这是来源:

 @Override
public void execute() throws Exception {
    setValue(invoke());
}

以及自java1.4以来存在的getValue():

 public Object getValue() throws Exception {
    if (value == unbound) {
        setValue(invoke());
    }
    return value;
}

getValue()执行execute()所做的一切。那么为什么对执行方法这么大惊小怪呢?

2 个答案:

答案 0 :(得分:1)

如果仔细观察,漏洞利用代码也会调用.getValue()。显然,该漏洞位于invoke内。 execute本质上是一个用于调用私有invoke

的公共接口

答案 1 :(得分:0)

几年前我报告了一个错误,其中Expression中的访问检查与编译器的访问检查不同。可能这是另一个例子。