在没有securitymanager的情况下防止反射

fcipmucu  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(204)

我在一个环境中制作了一个java程序,从“加载目录”中的文件加载代码。此环境在设置了不可恢复的 SecurityManager . 我想隐藏一个秘密 SecretKey 从任何恶意代码,也可以像我一样加载。在没有安全管理器的情况下,隐藏字段以避免反射似乎非常困难(如果不是不可能的话)。该代码的目的是保护最终用户免受放入“加载目录”的任何恶意代码的攻击。
这是我的密码:

public class KeyStore {
    private static SecretKey key = null;

    public static SecretKey getKey() {
        if (!Utils.getCallerClassName(1).startsWith("my.package.and.ClassName")) throw new SecurityException("Not allowed to get security key!");
        return key;
    }

    public static void setKey(SecretKey key) {
        if (!Utils.getCallerClassName(1).startsWith("my.package.and.ClassName")) throw new SecurityException("Not allowed to set security key!");
        if (KeyStore.key == null)
            KeyStore.key = key;
    }
}

其中utils.getcallerclassname()是:

public static String getCallerClassName(int howFarBack) {
        StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
        if (stElements.length >= howFarBack + 3) return stElements[howFarBack + 2 /* One for getCallerClassName() and one for getStackTrace() */].getClassName();
        return stElements[stElements.length-1].getClassName();
    }

上膛的 SecurityManager 只是阻止system.exit()并替换它。
有什么方法可以保护关键字段不被反射吗?如果没有,我应该怎么做才能保证数据的安全?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题