从公共静态上下文访问私有静态方法

时间:2009-05-14 09:14:02

标签: java security oop constraints

考虑这个示例类

class TargetClass {
    private static String SENSITIVE_DATA = "sw0rdfish";

    private static String getSensitiveData() {
        return SENSITIVE_DATA;
    }
}

当我这样做时,

import java.lang.reflect.Method;

public class ClassPiercing {

    public static void main(String... args) throws Exception {
        Class targetClass = Class.forName("TargetClass");
        Method[] methods = targetClass.getDeclaredMethods();
        methods[0].setAccessible(true);
        String sensitiveData = (String)methods[0].invoke(null, null);
        System.out.println("Sensitive Data: " + sensitiveData);
    }
}

输出是,

Sensitive Data: sw0rdfish

这很危险。我该如何防止这种情况发生?

2 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

访问控制的目的不是阻止某人侵入您的代码;这是向其他程序员发出信号的问题(例如api设计)。如果您不信任其他程序,则应运行不同的度量。例如,您可以以某种方式加密数据。